文字列置換マクロについて教えてくださいNo.01120
FAST さん 00/03/03 01:08
 
初めて投稿します。
失礼がありましたら初心者と思ってお許しください。

いきなり質問です。
あるフォルダ内の「*.html」ファイルを次々に秀丸で開いていき、
ある文字列置換を行ってファイルを保存していく、という処理を
マクロで行いたいと思っています。

「openbyhidemaru」や「replaceallfast」を使って、何とか
ならないかと考えていたのですが、なかなかうまくいきません。

まず、あるフォルダ内のファイルを開いて閉じて次のファイルを
開くということさえもできません。

こんなまるで何もわからない私に救いの手を差しのべていただけ
ないでしょうか。
皆様よろしくおねがいします。

[ ]
RE:01120 文字列置換マクロについて教えてNo.01123
ENCODINGSHIFTJIS さん 00/03/03 10:28
 
バッチ処理の自動化の強さをどの程度にするかでいろいろです。
大量データの時はスクリプト(SED,JPERL,RUBY,JAVA..)の出番ですから。

問題の形は ファイル名のリストを取得、一つずつ置換・保存を適用ですね。
        注.秀丸は複数面開けるが、マクロプロセスは一時に1本しか走らない。

        直ぐできる手動の多い方法は
        メニュー/その他(O)/プログラム実行(X) で
        command.com /c DIR/B 対象ディレクトリ\*.html >con
        で処理するファイル名のリストを得ます。
        次に、各行の頭に
        CALL HIDEMARUX.bat REP.mac を付けて
        CALL HIDEMARUX.bat REP.mac XXX.html の形にします。
        できたテキストを .BAT で保存して対象ディレクトリの中で実行する。
        CALL を付けないとマクロが複数本走ろうとしてぶつかる。

        HIDEMARUX.bat ------------
        秀丸のディレクトリ\HIDEMARU.exe /x%1 %2

        REP.mac ------------------
        changename basename+"2";// 直ぐ変名したほうが安全でしょう
        置換処理
        save exit  // 保存終了

        ここでは IN OUT が同じディレクトリですが、OUT を指定したければ
        BAT で                           set OUTDIR=出力DIR として
        マクロで  changename getenv("OUTDIR")+"\\"+basename;

        他のやり方では、全ファイルを秀丸で開いて、nexthidemaruで巡回
        して行くのがある。目で進行状況が見えないと不安になる人には
        こちらかも。

        __en__



[ ]
RE:01120 文字列置換マクロについて教えてNo.01124
かかし さん 00/03/03 12:49
 
かかしです、こんにちは。

FASTさん、こんにちは。

>まず、あるフォルダ内のファイルを開いて閉じて次のファイルを
>開くということさえもできません。

grep ".","*.html","",regular,filelist;

を使えば何とかなるかなあと思ってマクロを組んでみたのですが・・。

じつは、結果から言ったらうまく行かなかったんです。ごめんなさい。
ファイルを閉じるところでエラーが返ってきてしまうのです。

こんな私にも、以下のマクロのなにが原因でファイルクローズエラーに
なるか教えていただけるとうれしいのですが>ALL

---rep.macここから

$$FW = "abcd";//検索文字列
$$RW = "ABCD";//置換文字列
grep ".","*.html","",regular,filelist;
##i = 0;
while(1){
tagjump;
if(result == false){
break;
}
replaceall $$FW,$$RW;
##i = result + ##i;
//名前を変えて保存。
saveas filename + "2";
//save;
$$Cfile_h = filename;
message filename;
backtagjump;
down;
closehidemaru findhidemaru($$Cfile);
if(result == false){
message "file close error!";
break;
}else{
message "OK";
}
}
message str(##i) + "個置換しました。";
endmacro;
---ここまで。



---かかし

[ ]
RE:01120 文字列置換マクロについて教えNo.01126
ひろ さん 00/03/03 13:24
 
 FAST さん今日は、ひろです。
> あるフォルダ内の「*.html」ファイルを次々に秀丸で開いていき、
> ある文字列置換を行ってファイルを保存していく、という処理を
 http://hidemaru.xaxon.co.jp/library/macro/hmmacro10.html にある、
「秀まるおの秀丸マクロ集 Vol.1」に同梱されている multirep.mac である
程度自動化できます。

 他にもあったと思うのですが、自分が使っていないので解りません。

[ ]
RE:01123 文字列置換マクロについて教えてNo.01127
ENCODINGSHIFTJIS さん 00/03/03 15:10
 
もっと簡単にまとめられますね、直ぐ完成形にまとまらなくてすみません。
見えない区間が増えますがバッチ処理ですから。

DOS窓 −−−−−−−−−−−−−−
CD 処理ディレクトリ
LFNFOR ON
FOR %A IN (*.HTML) DO CALL HIDEMARUX.bat REP.mac %A

DIRの部分がなくなる。処理の記録は残りにくいからよしあし。

追記
changename は新規ディレクトリを作成しないため
事前に作っておかないといけません。

      __end__

[ ]
RE:01124 文字列置換マクロについて教えてNo.01128
ENCODINGSHIFTJIS さん 00/03/03 16:12
 
>                                      $$Cfile_h = filename;
>closehidemaru findhidemaru($$Cfile);

[ ]
RE:01124 文字列置換マクロについて教えてNo.01129
番頭++ さん 00/03/03 16:27
 
>こんな私にも、以下のマクロのなにが原因でファイルクローズエラーに
>なるか教えていただけるとうれしいのですが>ALL

replaceall $$FW,$$RW;
// replaceallfast $$FW,$$RW; // が速いです。
...
// closehidemaru findhidemaru($$Cfile);
closehidemaru hidemaruhandle(findhidemaru($$Cfile_h));//こう変えますです。


[ ]
RE:01129 文字列置換マクロについて教えてNo.01130
かかし さん 00/03/03 17:48
 
かかしです、こんにちは。

番頭++さん、こんにちは。

>>こんな私にも、以下のマクロのなにが原因でファイルクローズエラーに
>>なるか教えていただけるとうれしいのですが>ALL
 :
>// closehidemaru findhidemaru($$Cfile);
>closehidemaru hidemaruhandle(findhidemaru($$Cfile_h));//こう変えますです。

ありゃ!!
お恥ずかしい・・・。
こんな基本的なところだったのですか・・・。

ところで、秀丸のヘルプに以下のような記述があってそれを
参考にして書いたのですが
----
 例:
       #a = findhidemaru( "abc.txt" );
       if( #a == -1 ) {
           message "abc.txtはいません";
           endmacro;
       }
       closehidemaru #a;
       if( !result ) message "abc.txtの終了失敗です。";
----

直接、findhidemaruの値を使うのが悪かったのですか?

#こんな初歩的な質問ばかりで申し訳ありません。

---かかし

[ ]
RE:01130 文字列置換マクロについて教えてNo.01131
番頭++ さん 00/03/03 18:15
 
>直接、findhidemaruの値を使うのが悪かったのですか?

先の例のほうが固いです。
closehidemaru findhidemaru($$Cfile_h);
でもいけます、そのはずです。

$$Cfile ==> $$Cfile_h の間違いです。


[ ]
RE:01131 文字列置換マクロについて教えてNo.01132
かかし さん 00/03/03 19:04
 
かかしです。

>>直接、findhidemaruの値を使うのが悪かったのですか?
>
>先の例のほうが固いです。
>closehidemaru findhidemaru($$Cfile_h);
>でもいけます、そのはずです。
>
>$$Cfile ==> $$Cfile_h の間違いです。

あいた〜〜・・。
思いっきり間違えてますね・・。
御指摘ありがとうございました。<(_ _)>

--かかし

[ ]
RE:01123 文字列置換マクロについて教えてNo.01140
FAST さん 00/03/05 16:50
 
>バッチ処理の自動化の強さをどの程度にするかでいろいろです。
>大量データの時はスクリプト(SED,JPERL,RUBY,JAVA..)の出番ですから。
>
>問題の形は ファイル名のリストを取得、一つずつ置換・保存を適用ですね。
>        注.秀丸は複数面開けるが、マクロプロセスは一時に1本しか走らない。

FASTです。
教えてくださいと言っておきながら、なかなか見ることができず
すみません。

やはり私が考えていた以上に、複雑なことをやる必要があるようですね。
マクロ的なことというよりももっと本格的なプログラムを作らないと
いけなそうな内容だと考え直してみました。

今、Cの勉強をしているところなのですが、もしかしたら絶対パスを
取得して、文字列置換のために改行までの一文を配列の中に入れて、
検索して・・・ということをしていけばよいのかな?などとも考えたり
しています。
(マクロからは遠く離れてしまいますが・・・。)

いただいたコメントを元に、もう少しマクロでの解決策を考えてみようと
思います。

[ ]
RE:01126 文字列置換マクロについて教えNo.01141
FAST さん 00/03/05 16:52
 
> FAST さん今日は、ひろです。
>> あるフォルダ内の「*.html」ファイルを次々に秀丸で開いていき、
>> ある文字列置換を行ってファイルを保存していく、という処理を
> http://hidemaru.xaxon.co.jp/library/macro/hmmacro10.html にある、
>「秀まるおの秀丸マクロ集 Vol.1」に同梱されている multirep.mac である
>程度自動化できます。
>
> 他にもあったと思うのですが、自分が使っていないので解りません。

まずはマクロ集を見てみます。
ありがとうございます。

[ ]
RE:01124 文字列置換マクロについて教えてNo.01142
FAST さん 00/03/05 16:54
 

>じつは、結果から言ったらうまく行かなかったんです。ごめんなさい。
>ファイルを閉じるところでエラーが返ってきてしまうのです。

お試しいただいてありがとうございます。
みなさんにいろいろと教えていただけたので、改めて考えてみたい
と思います。

[ ]
RE:01141 文字列置換マクロについて教えNo.01143
ENCODINGSHIFTJIS さん 00/03/06 09:58
 
>> http://hidemaru.xaxon.co.jp/library/macro/hmmacro10.html にある、
>>「秀まるおの秀丸マクロ集 Vol.1」に同梱されている multirep.mac である

マクロの個別の動作の理解と共に、使われ方もよく考えます。
ここで設計をミスるとテクニックがあっても空振りです。

マクロ集の処理方式は
1.grep で対象行を集める
2.それを全置換
3.変更行を書き戻し (マクロの部分)

したがって、元のディレクトリーに書き込み権限があること、
改行を追加したり、改行を削除したりする置換は(マクロを読みきれた?)
置換の無いのは無変更で残る。タイムスタンプは新しくならない。
どこを変更したか記録を残せる。(ようにできる)
置換密度が低いときは効率がよいが、多いときは二度手間で遅い。
見えないサイズのウィンドウなどはテクニックです。

自分の使う状況を想定してマクロを読んで行きます。更に確認のテストランを
します。

プログラミングの評価は絶対的ではありません、状況によるトレードオフが
かなりあります。他人に使ってもらうマクロを作るのは神経使います。

最初は完全自動化にムリして走ると泥沼になります。
手動+マクロ+手動+マクロ くらいのわかるところから。
これで9割の処理はカバーできます。

シェル的な操作は最初から .DLL を使ったほうがスムーズです。
あるいは .BAT や WSH の起動など。
grep ".","*.html","."; もテクニックなのですけれど。

マクロ全体のイメージを構築するまでは「暗黒期」ですが、
小さな事からコツコツと。

__E__

[ ]
RE:01140 文字列置換マクロについて教えてNo.01144
ENCODINGSHIFTJIS さん 00/03/06 10:27
 
>今、Cの勉強をしているところなのですが、もしかしたら絶対パスを
C++などは大規模言語ですから直ぐわからなくても心配いりません。
テキストをちゃんと読んでいれば2〜3カ月後にはイメージができてきます。
全部わかるには1年かかるかも知れません。

マクロと言っても一つ一つは要素ですから組み合わせ方を読んで行きましょう。
電気製品のボタンや呪文のように完成した複合動作はしません。


[ ]