複数行の置き換え支援マクロNo.17352
奈良 さん 04/06/10 11:08
 
たくさんのファイルで複数行の置換えをしたいと思ってます。
秀丸のマクロライブラリにも複数行の置き換えをサポートするもの
があったのですが、やはり置き換えに特化したソフトと比べると
処理速度が遅いです。

そこでspeeeeed等の置き換えソフトを使おうと思ったのですが、
置き換え入力欄に入力できるのが一行しかありません。
でも置き換えたいのは複数行なのです。
(タグ等も含めて複数行。実際は100行程度)


そこでなのですが、複数行の文字列を(タグ、スペース、改行あり)を
そのままの内容を維持して複数行から一行のものに変更する
マクロをどなたか書いていただけませんか? お願いします。

[ ]
RE:17352 複数行の置き換え支援マクロNo.17359
秀まるお2 さん 04/06/10 14:06
 
 そういうマクロを作るにしても、マクロを使って処理する以上、動作速度が遅
いのは解決できないと思いますが、それでもいいでしょうか?

 ここの会議室でつい最近出てきた話と重なりますが、単純な置換をするマクロ
と、findf.exeを組み合わせるだけでも、とりあえず目的は達成できると思いま
す。findf.exeと組み合わせて使うという前提のマクロなら、あっと言う間に作
成できますけど…。

[ ]
RE:17359 複数行の置き換え支援マクロNo.17360
奈良 さん 04/06/10 14:50
 
>す。findf.exeと組み合わせて使うという前提のマクロなら、
>あっと言う間に作成できますけど…。

findf.exeというのはdosのソフトですね。
苦手なので遠慮しておきます。\nだけで一つ一つ置換えします。

ただ、あっという間に作成していただけるのでしたら
時間を作って使い方を学びたいので作っていただけると
うれしいです。 のちのち必要な方もいるかもしれませんし。

少し時間を割いて作れるものでしたら、作っていただけると
うれしいなぁとおもいます。

[ ]
RE:17360 複数行の置き換え支援マクロNo.17361
秀まるお2 さん 04/06/10 15:17
 
> findf.exeというのはdosのソフトですね。

 WindowsNT/2000/XP上で動く、いわゆるコンソールアプリケーションというや
つでして、DOS用のソフトって訳じゃないです。ただ、どっちにしても、Windows
のコマンドプロンプトを使うことが前提となりまして、それなりにコンピュータ
を使う上での上級者向けの知識が必要です。

> そこでなのですが、複数行の文字列を(タグ、スペース、改行あり)を
> そのままの内容を維持して複数行から一行のものに変更する

 例えば、ですが、

   aaa
   bbb
   ccc

 と書いてある行を、

   aaabbbccc

 に置換したいって話でしょうか?。だとしたら、マクロとしては、

    replaceall "aaa\\nbbb\\nccc" , "aaabbbccc" , regular, nocasesense;
    saveexit;

 のたった2行です。仮にそのマクロの名前が「test.mac」だとしたら、

    findf *.html -exec hidemaru.exe /x test.mac {} ;

 のような形で、特定フォルダ配下のhtmlファイルすべてを置換することが出来
ます。

 findfについてはここの会議室の17326番発言を参考にしてください。

------------------
 findf相当の処理を秀丸でやることも可能ではあります。その例は以下のよう
になります。

    $dir = input( "検索したいフォルダは?", directory );
    if( $dir == "" ) endmacro;
    grep ".", "*.html", $dir, regular, filelist, fullpath;
    #grep = hidemaruhandle(0);
    gofiletop;
    while(1) {
        tagjump;
        if( result ) {
            replaceall "aaa\\nbbb\\nccc" , "aaabbbccc"
                     , regular, nocasesense;
            save;
            #file = hidemaruhandle(0);
            setactivehidemaru #grep;
            closehidemaru #file;
        }
        golineend2;
        down;
        if( !result ) break;
        golinetop2;
    }
    endmacro;

[ ]