アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

複数のgrepを行い、結果を保存するマクロ

例えば

01_ABC
02_DEF
03_GHI

というテキストを用意して秀丸で開いておきます。
このリストについて、
・「ABC」で任意のフォルダにてgrepを実行
grepの結果をテキストファイルとして保存
 (ファイル名は[grep]01_ABC.txt)
・「DEF」「GHI」についても同様の処理を行う
 (リストの一番下まで実行)
という処理を行うマクロを作ったのでバックアップも兼ねて公開。

業務で特定の作業用に即興で作って自分が使っただけのものなので、
ちょっと微妙な仕様&ロジックかもしれません。
でも、もし「膨大なソースコードから複数のワードをgrepして全部リストアップする」とかいう作業を求められたら
このスクリプトを放置しておくだけでOKです。
(この作業依頼されたとき、いつも1ワードずつ手作業でやってるよ、とか言われたよ…アホかよ…それでも本当にマかよ…)

場合によっては、あらかじめ
メニュー>その他>動作環境>検索>grep にて、
文字数制限を外しておいたほうがいいかもしれません。
使用目的や状況に応じて。

また、カーソル位置をひとつずつ下げて…というループをしているので、
実行中は秀丸には触らないでください。

コード中に「//A」「//B」というコメントがありますが、
これは例えば「001_xxx_ABC」という文字列があるとして、
最初の「_」で区切って「xxx_ABC」でgrepをかけたいならAを、
最後の「_」で区切って「ABC」でgrepをかけたいならBを有効にします。

///////////////////////////////////////////////////////////////////////
// ◆ユーザ設定
// grepディレクトリ(最後に「\」をつけてください!特殊文字なので2個ずつ)
$curdir = "C:\\hoge\\hogehoge\\";
// 結果保存ディレクトリ(同上)
$savedir = "C:\\hoge\\yomoyomo\\";
// grep対象ファイル(拡張子とか)
$filekind = "*.c;*.cpp;*.h";
// 区切り文字:「01_ABC」の「ABC」でgrepかけたいなら「_」を指定
$token = "_";
// ファイル名(前)
$filename_a = "[grep]";
// ファイル名(後)
$filename_b = ".txt";
//→ここで指定した文字列とテキストの内容を組み合わせてファイル生成
///////////////////////////////////////////////////////////////////////
//マクロを実行した窓のハンドルを取得
#HWND = hidemaruhandle(0);

//ファイルの終わりまでループ
gofiletop;
#tmplineno = lineno - 1;
while (code != eof) {

    //1行まるまる取得
    $strall = gettext(0, #tmplineno, linelen, #tmplineno); 

    //区切り文字より後の部分をgrep
    //$strgrep = midstr($strall, strstr($strall, $token) + 1); //A
    $strgrep = midstr($strall, strrstr($strall, $token) + 1);  //B
    grep $strgrep, $filekind, $curdir, nocasesense, subdir, icon;

    //今開いたgrep窓のハンドルを取得
    #HWND_GREP = hidemaruhandle(0);

    //grep結果を保存して閉じる
    saveas $savedir + $filename_a + $strall + $filename_b;

    //元の窓に戻る
    setactivehidemaru #HWND;

    //grep窓を閉じる
    closehidemaru #HWND_GREP;

    //次の行へ
    #tmplineno = #tmplineno + 1;
    movetolineno 1, #tmplineno + 1;
    if (#tmplineno == lineno) break;

}