Indexへ
(11937)//【11940】//(11942)
------------------------
【タイトル】Lite & Seen Lite / JW_CAD 外部変形 / awkによるプログラムの研究報告
【記事番号】 11940 (*)
【 日時 】08/02/01 22:32
【 発言者 】Kazuo Miyake
【 リンク 】http://www17.ocn.ne.jp/~lite/
awk1行プログラムによる外部変形は メモ
リ制限があるため1KB程度のものしか扱え
ないのですが( 当方の環境 )、バッチファイ
ルに直接プログラムを書くことができる便利
な方法です。
しかし、プログラムを1行に詰め込むため
簡単な処理にも関わらず、あとから内容を読
み直すことが難しく、外部変形機能にとって
は、あまり実用的な手法ではありません。
そこで、
awk1行プログラムを複数行に書く方法 を
考えました。以下に報告します。
Windows 2000 以降でなければ 動作しない
と思います。ご容赦ください。
例として、線を指示してその両端に点を打
つ外部変形で説明します。
○従来のawk1行プログラム
@rem 【 線の端点をマークする 】
@echo off
REM #jww
REM #1ln 線を指示してください。
REM #bz
REM #e
call:main jwc_temp.txt jwc_temp.bak
exit
:main
( echo bz
jgawk '/^^[ ]/ ^&^& NF==4 { print "pt",$1,$2 RS "pt",$3,$4 }' %1
) > %2
del %1
ren %2 %1
goto:eof
○awk1行プログラムを複数行に書く方法
末尾に「^」を置けば 複数行にわたって
プログラムを書くことができます。
ただし、この機能が正式なものかどうか
は不明です。この機能が働かない環境もあ
ると思われます。
@rem 【 線の端点をマークする 】
@echo off
REM #jww
REM #1ln 線を指示してください。
REM #bz
REM #e
call:main jwc_temp.txt jwc_temp.bak
exit
:main
( echo bz
jgawk ^
'^
/^^[ ]/ ^&^& NF==4 {^
print "pt",$1,$2 RS "pt",$3,$4 ^
}^
' %1
) > %2
del %1
ren %2 %1
goto:eof
この方法は、プログラムにコメントを記入
する適当な仕方がないようです。
print "#コメント" なども考えてはみたの
ですが、エラーを返すことがあります。
1行プログラムの途中にコメントを入れる
こと自体に無理があると考えたほうが自然な
のかもしれません。
ダブルクォート「"〜"」でプログラムを書
く gawk にも利用できます。
ただし、そのとき
jgawk ^
'^
/^^[ ]/ ^&^& NF==4 {^
pt="pt",$1,$2 RS "pt",$3,$4^
}^
' %1
は
gawk ^
"^ <--- 必ず行の先頭
/^[ ]/ ^&^& NF==4 {^
pt=\"pt\",$1,$2 RS \"pt\",$3,$4
}^
" %1
としなければなりません。
さらに、
副産物として、環境変数を利用してマクロ
のようなものを作ることができます。
例えば、次のように
set pt="pt",$1,$2 RS "pt",$3,$4
( echo bz
jgawk ^
'^
/^^[ ]/ ^&^& NF==4 {^
print %pt% ^
}^
' %1
) > %2
プログラムは MS-DOS の影響を受けるため
< > & | % ^ と ( ) や \ などは、そのまま
では使えません。
興味をお持ちの方は、下記のホームページ
http://www17.ocn.ne.jp/~lite/
「 外部変形 awk 普通のランプ」に簡単な
例題や説明があります。
繰り返しになりますが、
awk1行プログラムによる外部変形は メモ
リ制限があるため1KB程度のものしか扱え
ません( 当方の環境 )。
また、マニュアルに説明のある正しい使い
方でもありません。いまのところ、こういう
こともできる程度のものです。
以上です。
皆様方のご健康とご活躍をお祈り申し上
げます。
記録 2008.02.01 三宅