「gawk」の正規表現で
の記事に対するCPU.BACHさんのコメントに関して・・・
※MS-DOS時代からjgawkはあれこれと使っています。
部品ソース内にこんな行が出てきます。
'7400' ←部品名
{X Size =} 4 {Y Size =} 4 {Parts per Package =} 4 ★
L1 1 4 9 12 IN 'I0' ←ピン指定
L3 2 5 10 13 IN 'I1'
R2 3 6 8 11 DOT OUT 'O'
T0 14 14 14 14 PWR 'VCC'
B0 7 7 7 7 PWR 'GND'
gsub(/{.*}/, "", $0)
{ }に囲まれた文字列という正規表現なのですが、
{xxx} yyy {xxx} zz が
1 2 3 4
※こりゃawkのスクリプトじゃないぞ(笑)
##### コメントを取り除く #####
# 読み出したデータの中から「コメントフィールド」を取り除く
# OrCADのライブラリソースのコメントは「{...}」となっている
# 直接バッファを操作して「{}」とコメントを取ってしまう
# gsub(/{.*}/, "", $0)だと
# 「{xxx} yyy {xxx} zz」が yyyまで消えてzzしか残らない
function rmvcmnt(s, c,f)
{
r_bff = "";
f = 0; # 1で文字コピー禁止
for(i = 1; i <= length(s); i++){
c = substr(s, i, 1); # 1文字取り出し
if(c == "{") f = 1; # 「{」以降はコピーしない
else if(c == "}") f = 0; # コピー再開
else if(f == 0){ # 文字連結
r_bff = r_bff c; # {xxx}以外の文字はコピー
}
}
return r_bff; # コメント削除した1行
}
正規表現を使っての何か良い手順はありませんかね?
※参考
ファイルから読み出した1行は「$0」に入る。
function rmvcmnt(s, c,f)の s は関数への引数。
その次にスペースをあけてのc,fは関数内部だけの局所変数。
ほかにも、「 { } 」で囲まれたこんなコメントがあります。
{000000000011111111112}
{.....................}
{012345678901234567890}
{ 0.0}##...................
{ 0.1}#.##.................
{ 0.2}#...##...............
{ 0.3}#.....##.............
{ 0.4}#.......##...........
{ 0.5}#.........##.........
{ 0.6}#...........##.......
{ 0.7}#.............##.....
{ 0.8}#...............##...
{ 0.9}#.................##.
{ 1.0}#...................#
{ 1.1}#.................##.
{ 1.2}#...............##...
{ 1.3}#.............##.....
{ 1.4}#...........##.......
{ 1.5}#.........##.........
{ 1.6}#.......##...........
{ 1.7}#.....##.............
{ 1.8}#...##...............
{ 1.9}#.##.................
{ 2.0}##...................
これも行の中から消してしまいたいわけでして。
{X Size =} 、 {Y Size =}、{Parts per Package =}は
固定文字列なんで3つを個別にgsubで先に処理。
その後、「{ 2.0}」などを正規表現で削除かな。
こんな具合に。
# コメント文 {xxx} を消す
gsub("{X Size =}", "", $0); # コメント削除
gsub("{Y Size =}", "", $0);
gsub("{Parts per Package =}", "", $0);
gsub(/{.*}/, "", $0); # 残りの{...}を全部
:
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- VZ Editorのフロッピーディスク(2024.11.29)
- インピーダンスの歌(2024.08.19)
- イチケンさんの動画に居酒屋ガレージ日記(旧ページ)が(2024.03.27)
- メモ:crane1000.com(2023.08.02)
- Gigazineの記事「DDR Type 2の内部構造がすごい」(2023.01.10)
「Help me! (助けて!)」カテゴリの記事
- あかんやん「Microchip Studio」(2025.06.13)
- Microchip StudioでMPLAB@Snapが動かない(2025.06.12)
- オムロンのタイマー「H7ET-FBV」のGATE入力回路はどうなっているの?(2025.04.24)
- 2.0mmピッチの電線対電線接続用コネクタ(2024.12.11)
- この「テープ」は何という名前?(2024.10.01)
「電子工作」カテゴリの記事
- ひさしぶりのイベントだったけど・・・「ピコピコ・スイッチ」破損(2021.12.13)
- 顕微鏡用LEDリングライトのLED、そろそろ交換か(2021.09.27)
- 可変抵抗器の「陽極酸化」(2021.09.22)
- 弾帯状になったQIコネクタのコンタクトピンを・・・(2021.08.27)
- AD620を使った計装アンプとシミュレーテッド・インダクタを使ったノッチフィルタ(2021.08.16)
「AWK(GAWK)」カテゴリの記事
- 新しいGAWK --csvオプションで””の中のコンマを区別してくれる(2025.02.25)
- BSch3V CE3ファイルからコメント文字をピックアップ(2022.11.09)
- 「トラ技」の記事検索(2022.08.31)
- サーミスタ温度計、何ビットのA/Dコンバータがいるか?(2021.08.11)
- gawk 文字列から1文字を取り出して8bit数値として扱いたい(2020.10.21)
コメント
はじめまして
gawkは普段使っていないのですが perl であれば下記の正規表現でできました。
{}内の指定文字として任意の1文字'.'ではなく'\}'以外の文字の繰り返しとしています。
s/\{[^\}]*\}//g;
投稿: skyriver | 2019年2月 9日 (土) 15時04分
何だかとんだお手数をお掛けしているようで恐縮です。おっしゃるとおり、CEの時代には変換して使えていましたね。だんだん記憶が蘇って来ました。
投稿: CPU.BACH | 2019年2月 9日 (土) 16時57分
skyriverさん、ありがとうございます!
gawkでは、
gsub(/\{[^\}]*\}/, "", $0);
gsub(/{[^}]*}/, "", $0);
このどちらでも成功。
「{xxx} yyy {xxx} zz」から「yyy zz」が取り出せました!
投稿: 居酒屋ガレージ店主(JH3DBO) | 2019年2月 9日 (土) 17時55分
LIBSXV3.AWKとその解説です。
http://act-ele.c.ooco.jp/jisaku/libsv3/libsv3.htm
投稿: 居酒屋ガレージ店主(JH3DBO) | 2019年3月 6日 (水) 09時02分