初級マクロ教室No.14257
さん 03/03/12 10:00
 
 先ほどながさわさんのアドバイスにしたがい,grepによって特定行を抽出したファ
イルを作成しました。
 その場合,先頭にファイル名(行数)が記されるのですが,これを消すマクロを組み
たいのです(他にも置換するので,マクロ)。
ABC(26): 書名   :....
ABC(146): 出版社  :....
 行数の桁は1から3,4桁。
 これに対して僕は
replaceallfast "^ABC\([0-9]+\): ","",regular;
 と記述してみたのですが,
 該当箇所は全く反応しませんでした^^;。
 なぜ? また,どのように記述すればよいのでしょうか。
 正規表現不慣れな僕にご教示下さい。

[ ]
RE:14257 初級マクロ教室No.14259
ながさわ さん 03/03/12 10:23
 
こんにちは、ながさわです。

マクロ中で円サインを使うときは、円サインでエスケープしてやる必要がありま
す。

replaceallfast "^ABC\\([0-9]+\\): ","",regular;

で、行くと思います。なれないウチは(特に正規表現を用いる場面では)、ちょ
っと混乱するカモですね。

[ ]
RE:14257 初級マクロ教室No.14265
白雲斎 さん 03/03/12 11:18
 
 白雲斎です。

最初に、これは「hidesoft.2:14251| 特定行の抽出」のスレッドに投稿したほう
がよかったのでは??

マクロ上で括弧( "(", ")" )をエスケープするには、"\\(" と "\" を2個書
かなければなりません。

replaceallfast "^ABC\\([0-9]+\\): ","",regular;
//               ~~~~ 拡張子はないのかな?

「hidesoft.2:14251| 特定行の抽出」の操作は以下のマクロでどうでしょう。
対象となるファイルを開いて、その上で実行してください。

// collecBook.mac ---------------------------------------------

$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;

localgrep "^(題名|作者|出版社|ISBN)", regular;
if( linecount2 == 1 ) goto NoMatch;
disabledraw;
replaceallfast "[^:]+\\([0-9]+\\): *", "", regular;
// セクションの先頭語句で空白行を挿入
// 先頭が「題名」でない場合は変更する事!
replaceallfast "^題名", "\n\\0", regular;
gofiletop;
enabledraw;
setsearch $sb, #so;
setreplace $rb;
endmacro;

NoMatch:
setsearch $sb, #so;
setreplace $rb;
message "キーワードにマッチした行を発見できませんでした。";
quit;

//-------------------------------------------------------------

[ ]
RE:14265 初級マクロ教室No.14268
さん 03/03/12 11:37
 
 白雲斎さん,早速ご回答有り難うございます(楽)。

>最初に、これは「hidesoft.2:14251| 特定行の抽出」のスレッドに投稿したほう
がよかったのでは??
 ですね。

>replaceallfast "^ABC\\([0-9]+\\): ","",regular;
>//               ~~~~ 拡張子はないのかな?
 ファイル自体に拡張子を付け忘れた^^;のです。

 わざわざマクロを組んでくださって有り難うございます。
 もっとも僕には白雲斎さんが例示してくださったマクロはまだ理解できないのです。
じっくり勉強してみます。

[ ]
RE:14265 初級マクロ教室No.14269
白雲斎 さん 03/03/12 11:38
 
 白雲斎です。

すみません。投稿したマクロに不備がありました。

>replaceallfast "[^:]+\\([0-9]+\\): *", "", regular;

以下、再度アップします。

// collecBook.mac ---------------------------------------------

$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;

localgrep "^(題名|作者|出版社|ISBN)", regular;
if( linecount2 == 1 ) goto NoMatch;
disabledraw;
replaceallfast "^[^:]+\\([0-9]+\\): *", "", regular;
// セクションの先頭語句で空白行を挿入
// 先頭が「題名」でない場合は変更する事!
replaceallfast "^題名", "\n\\0", regular;
gofiletop;
enabledraw;
setsearch $sb, #so;
setreplace $rb;
endmacro;

NoMatch:
setsearch $sb, #so;
setreplace $rb;
message "キーワードにマッチした行を発見できませんでした。";
quit;

//-------------------------------------------------------------

[ ]