2009-06-11(木)雨、曇り、晴れ
PCとかHP200LXでのテキスト処理にはSEDを使用しています、というか、それしか分かりません。今まではかじった程度でいい加減に使用していましたが、と、あることがあって少し勉強したら、なかなか深いですね。良い勉強になりました。今まで作ったSEDスクリプトも、偶然動いている、なんてのもあるようです。
SEDは、
・HP200LXの出納帳の出力をEXCELや1-2-3に読ませるためとか、
・予定管理の「あかべこさん作タグスケ」など、あとは
・Pythonスクリプトのコメント部分の削除とかで使用しています。
今回、タグスケの新バージョンで動かないケースが出て SED.EXE そのものを変更してみました。しかし、SEDそのものの変更には注意が必要なことが分かりました。
SEDを変えたら、出納帳データの変換が動かなくなったり、ハングアップしているのか悩んだり、色々ありました。
気をつけるのは
(1)使っている機能の互換性
(2)処理速度
(3)欲しい機能のインプリメント状況
です。なお、(2)の処理速度などは、HP200LXでの固有の問題です。PCであれば、どんなPC でも(HP200LXに比べれば速いから)速度は問題になりません。
今回比較したのは下記の3件です。
(a)DOS基本セット版(と思う)1990/08/13 29KB
(b)SED242(vectorから) 1992/06/17 25KB
(c)谷本氏の版(vectorから) 1994/06/02 69KB
比較表は下図のとおりです。
項番1の速度は15倍の違いがあります。6分近くだとハングアップしているのか、と悩んでしまいます。
注1:
項番3の条件分岐(tコマンド)は、直前の置換コマンドの結果で分岐するか、それ以前の結果が影響するかという問題です。○は直前の結果のみで分岐/非分岐が決まります。×はそれ以前の置換の結果が影響します。○の方が使いやすいのですが、説明ドキュメントの仕様を見ると×の動きが正しいようにも見えます。
分岐判定フラグ
・セット : 置換コマンドの置換が実行されたとき(YESのとき)
・リセット: t コマンドの分岐発生時、 あるいは次の行の読み込み時
これで行くと、置換が発生しなかったときは、フラグは変化しないから、前の置換でのフラグの状態(セットされた状態)が影響します。このため、テスト時、データ出力が無くなって随分と悩みました。
対策としては、下記のように、間にリセット用のtコマンドを挟むか、tではなく「 /アドレス/コマンド」のフォーマットを使用します。
s/RE1/PTN1/g
t DMY
:DMY
s/RE2/PTN2/g
t L10
2行目と3行目はフラグリセット用のtで、分岐してもしなくても4行目へゆくというダミーです。
項番4のアドレスとコマンド間というのは /ADDR/ と d の間にスペースが許されるかどうかです。これはいずれもOKでした。
項番5のコマンド間というのは、!とsの間にスペースが許されるかどうかです。記法としてはスペースはないのですが、あっても動くもの(○)と動かないもの(×)があります。タグスケの新バージョンでは、このためSEDによって動いたり動かなかったりで悩みました。
項番6は正規表現の {m,n} という表現(m回以上、n回以下の繰り返し)がインプリメントされているか否かです。Cの谷本版だけがインプリメントされています。
ということで、勉強になりました。因みに、SEDは通常はSED242を使用して、{m,n} が必要なときだけ、谷本氏の版を使用することにしました。
最近のコメント