というほどのものではありませんが。 でも久しぶりに真剣に考えました。難しいことはしていません。ちょっとした 分岐の入った、マニュアル操作再現のエディタのマクロらしい、マクロです。 アルゴリズム(仕様)に悩んだ、悩んだ。製作に総計6時間はかかっている。 2週間ぐらい考えていました。疲れ切った頭で。 \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)zzz$ のようなタグ付き置換用、検索文字列の上で実行してみてください。 次行にタグ番号を整理した「置換文字列」が現れます。 シフトで置換用にPSに両文字列を入れてくれます。 あ、ふつうのファイルの上で実行ね。編集モードオンリーのマクロです。 nifty初期のころにも、僕はこれを書いてましたね。 コマンドラインとかtext boxとかって、どうも緊張してしまいます。 ダミーファイルにとりあえず書き始めてしまうと、落ち着いて考えられます。 もし、「おい、こういう場合、バグるぜ」とかあったらお教えください。 あまり意地悪はなしです。正規表現のチェックとかはしていません。タグの 整合性もチェックしていません(カーニハン先生いわく「funny situationの ことを気にしすぎるな。仕様書〔document〕に最初から *bug欄 を作っておいて ユーザに注意喚起するもよろし」)。もっとも、僕のばあい、タグ付きとか キャラクタークラスとかの正規表現はマクロで出力してますから、まず、変な ミスはないのですが。 僕の頭が悪いというミスが、ミスの代表格。 そして、これでいいのか? みたいな、いつもの自信なし状態です。 このところ、けっこうテキストファイルをごにょごにょしてる時間が長いのですが、 そしてプログラミング関係本をそこそこ眺めてはいるのですが(Software Tools, __ in Pascal by Kernighan)、やっぱ、80x25文字が画面の基本と考えている のでインデントは少なめな書式になってます。意図です。 贅沢になれると、MS-DOS画面でつらいです。 僕的にはふつうですが、"Comment like crazy."というJeff先生の教えも反映させて ます。訳すと、「狂ったようにコメントを入れよ」。 VzマクロはVzマクロで、if...elseがあるとはいっても、ラベルジャンプだなぁ、 と進歩のないことになってます。そっちが読みやすいのだもの。 === tag_rplp by B ===; Tag Replacement Prep \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)zzz$ aaa\1\2\3\4zzz * M 50 ^^ "tag_rplp" ?. i=1, ;replace tag num (\i; \1, \2, \3 etc) k=ks&1, &s #k #i ;duplicate line #x ; ----- del top&tail \x , ^, $ ----- #< (cd=='\')? #g ;del \x ? { &m("\x missing. Regex?") >z } (cd=='x')? #g ; (cd==' ')? #g ; (cd=='^')? #g ;del ^ #> #s (cd=='$')? #g ;del $ #< ; ----- main loop ----- :a (ct==1)? >z ; ----- srch \( ----- (cd=='\')? { #d (cd=='(')? { #g &?("%d",i) i++, >b } ;\( found, del ( } ; & put \1 (\2,\3) #d >a ; ----- srch \) ----- ; now in delstring = DELing :b (cd=='\')? { #d (cd==')')? { #g #h } ;\) found, del \) } ;stop deleting ? { #g >b} ;deleting the inside>a; ----- if shift, get 2 strings in PS ----- :z (k)? { #< #b #> #G ;2nd line, repl str #e #< #b #> #G } ;1st line, srch str #< &d . *
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -