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 三宅