「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); # 残りの{...}を全部
:
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- Gigazineの記事「DDR Type 2の内部構造がすごい」(2023.01.10)
- 廃棄する本や説明書、データーブックなど(2021.03.20)
- CR2032バックアップ用リチウム電池・・・0V(2020.09.17)
- エライこっちゃ。ネットも電話もできない!! (2020.07.10)
- ひさびさの1.2Mフォーマットのフロッピ(2019.09.10)
「Help me! (助けて!)」カテゴリの記事
- LEDの絶対最大定格:逆電圧(Vr)への反論(2023.01.31)
- 電流検出アンプ 入力端子になぜかマイナスが出てくる(2023.01.30)
- 三和の針式テスター「GP-5」不調(2022.10.18)
- サーミスタ103JTで計った温度をアナログ出力(2022.10.03)
- 「ダイソー ミニケース 5個組」が見つからない(2022.09.29)
「電子工作」カテゴリの記事
- 電池ホルダーから電源供給するためのアダプタ(ダミー電池)#2(2023.03.24)
- 電池ホルダーから電源供給するためのアダプタ(ダミー電池)(2023.03.23)
- 単電源で反転アンプ マイナスの入力電圧は増幅できます(2022.11.28)
- 予告:「マイコン型導通チェッカー」「電池電圧チェッカー」値上げします(2022.11.16)
- ダイソー ミニケース 5個組の加工(2022.10.23)
「AWK(GAWK)」カテゴリの記事
- BSch3V CE3ファイルからコメント文字をピックアップ(2022.11.09)
- 「トラ技」の記事検索(2022.08.31)
- サーミスタ温度計、何ビットのA/Dコンバータがいるか?(2021.08.11)
- gawk 文字列から1文字を取り出して8bit数値として扱いたい(2020.10.21)
- ダイソーReVOLTES単3 JIS C8708:2019充放電試験途中経過(2020.03.05)
コメント
はじめまして
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分