マクロの行数はどれくらいまで?No.02801
megmin さん 01/12/10 17:02
 
お世話になります。
超初心者な質問で申し訳ありません。

マクロの行数は何か制限とかあるのでしょうか?

内容は、単純な検索置換なのですが、
対象となる文字列のパターンが多くて
200行×20ファイル分ぐらいあります。

そんなに長いマクロファイルというのは、可能でしょうか?

お教えください。
よろしくお願いします。

[ ]
RE:02801 マクロの行数はどれくらいまで?No.02802
ひろ さん 01/12/10 17:53
 
 megmin さん今日は、ひろです。
> マクロの行数は何か制限とかあるのでしょうか?
 まず前ふりとして、実は秀丸のマクロはインタープリンタではなく、コン
パイル作業が行われ、内部的にはバイナリコードに変換されるそうです。そ
してマクロは行数ではなく、このコンパイル後のバイナリコードのサイズに
制限があったとおもいます。ですから単純に何行までとは言えないです。

> 内容は、単純な検索置換なのですが、
> 対象となる文字列のパターンが多くて
> 200行×20ファイル分ぐらいあります。
 これだけ多いと、replaceall を使っただけではサイズオーバーになるかも
しれませんね。幾つかのマクロに分割して、execmacro を使うか、
//---------------------- sample macro -------------------------------
##i = 0;
while(1){
  $search = getinistr("word.ini","SEARCH",str(##i));
  if( $search == "")break;
  $replace = getinistr("word.ini","REPLACE",str(##i));
  #option =  getininum("word.ini","OPTION",str(##i));
  setsearch $search, #option|4;
  setreplace $replace;
  gofiletop;
  while( result )finddown2;
  ##i = ##i + 1;
}
//---------------------- sample macro -------------------------------
というマクロを書き、word.ini の内容は、
;------------------ sample of INI file ------------------------------
[SEARCH]
1="検索語1"
2="検索語2"
3="検索語3"

[REPLACE]
1="置換語1"
2="置換語2"
3="置換語3"

[OPTION]
1=0
2=1
3=16
;------------------ sample of INI file ------------------------------
というに、置換をおこなうデータとマクロを別にしておくとできると思いま
す。ただしこの ini ファイルにも制限があり、1 つのセクションで 32 KB、
全体で 64 KB です。

[ ]
RE:02801 マクロの行数はどれくらいまで?No.02803
TAKA さん 01/12/10 18:05
 
TAKA です。

>内容は、単純な検索置換なのですが、
>対象となる文字列のパターンが多くて
>200行×20ファイル分ぐらいあります。
>
>そんなに長いマクロファイルというのは、可能でしょうか?

おそらく、4000行の「replaceallfast」等を記述しても、マクロが
動くかということだと思いますが、どうなんでしょう。
過去に、マクロの行数の制限の話は聞いたことがありません。

制限については、秀丸担当さんから後日コメントがあると思います。
ただ、秀丸担当さんは、こちらに目を通していない時があるかもし
れないので、2、3日してもコメントがない場合は、2番会議室で
再度質問した方が良いと思います。


現状の逃げとしては、置換元と置換後の文字列を別ファイルに定義
して、マクロは数行にしてしまうという方法があります。
別ファイルがINIファイルの場合は、OSによって、INIファイルに
64Kという制限がありますが。

ここのライブラリ
http://hide.maruo.co.jp/lib/macro/index.html
に、「複数文字列の一括置換」というマクロがありました。
これが、該当するかもしれません。マクロ名からだけの判断なので、
違っているかもしれませんが。

http://www.infomadonna.ne.jp/~takata/hm/#macro
に、「複数ファイル、複数候補の一括置換」というマクロもありま
す。これは、INIファイルを使うので、OSによっては、64Kの制
限があると思います。


別の逃げとして、「execmacro」という命令で、マクロからマクロ
の呼び出しも可能ですので、マクロをいくつかに分けるという方法
もあります。ネストにはある程度の制限があるようですが。


取りあえず、以下のようなマクロを実際に作って動かしてみると
よいと思います。
// テストファイル(ここから)
    disabledraw;
    replaceallfast "a", "b";
        :
        :   この間に同じ物を4000行コピー
        :
    replaceallfast "a", "b";
    enabledraw;
    message "取りあえず動くみたい";
    encmacro;
// テストファイル(ここまで)


ただ、4000行の置換となると結構時間がかかると思いますので、
置換専用のコマンドを使った方がいいとは思います。

[ ]
RE:02802 マクロの行数はどれくらいまで?No.02806
きいろいまふらあ さん 01/12/11 01:07
 
補足というか蛇足というか。

>す。ただしこの ini ファイルにも制限があり、1 つのセクションで 32 KB、
>全体で 64 KB です。

ひとつのiniファイルで足りなければ、複数のiniファイルを渡り歩けばよいでし
ょう。その複数のファイルをマクロの中で(例えば配列変数で)指定してやって
もいいし、いっそそれさえもiniファイルとして外に出してもいいですね。

[ ]
RE:02801 ありがとうございますNo.02807
megmin さん 01/12/11 09:13
 
ひろさん、きいろいまふらあさん、TAKAさん
ありがとうございます。

超初心者なもので、.ini ファイルの書き方なども
これから勉強しなくっちゃという状態ですが、
いろいろ手はあるということがわかりました。
これから勉強します。

また、わからなくなったら質問させていただきます。
ありがとうございました。

[ ]