長い検索文字列の検索・置換No.05071
Buckeye さん 06/02/27 10:06
 
え〜、ひさびさに秀丸のマクロをいじってるんですが、やりはじめたらけっこう
のってしまい、前々からなんとかしたいと思っていた長い検索文字列の検索・置
換ルーチンを作っています。とりあえず、通常の検索なら基本的に長さ制限なし
(マクロの変数エリアの総量を超えるようなものはダメですが)で検索できると
ころまでできたので、完成の目処はたったというところです。検索で範囲選択し
ているから、置換は、検索を呼んでから挿入すればOKだし、上方向などはルーチ
ンをコピーしてちょっと書き換えればすみますし。

これ、完成したら使ってみたいって方、おられますか。おられるようなら、私の
ウェブででも公開しますけど。

    単体のマクロにするのはちょっと無理がある(execmacroで呼ぶようにやっ
    てできないことはないけど)し、一般の人が使うものじゃなくて、あくまで
    マクロを作る人が使うものなので、マクロライブラリに登録っていうのはな
    いんだと思いますから。

なお、マクロで実現できるレベルですから、当然ながら、検索・置換の機能を完
全に再現しつつ、バッファサイズの制限を超えるというところまでは不可能です。
正規表現なども簡単なものなら大丈夫ですが、前方参照、タグ付き正規置換など
は、基本的に使えません。ようするに、検索文字列をバッファサイズの制限内に
分割し、順次検索してひとつながりに最後までヒットするなら検索でヒットした
と判定しているわけです。ですから、バッファサイズの制限内に分割したとき、
ひとまとまりの中に入るなら前方参照は使えますが、それ以外はダメ、どこが切
れるか事前にわかりにくいことから、結局、前方参照もやめたほうがいいという
ことになります。()[]{}?+*は、問題のあるところではなるべく切らないように
アルゴリズムを組んでいるので、たいがい、なんとかなります([]や()だけでバ
ッファサイズの制限を超えてしまうと対応できませんが)。

なお、検索条件は、setsearchの数値で指定する必要があります。searchupなど
のようにwordなどのキーワードで設定できるようにするアルゴリズムまで組むの
はかなり面倒そうで、そこまでする気になれないので。searchupなどの検索オプ
ションを文字列変数から展開できるように秀丸担当さんにお願いはしたので、そ
ちらで対応していただけたら、searchupなどと同じように設定できるようにする
ことが可能になります。

Best regards,
Buckeye

[ ]