Applekdz
@Applekdz

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

EmEditor、テキストエディタなどの正規表現のマクロで、探索する行数範囲を指定することは可能でしょうか?

テキストエディタ、EmEditorなどの正規表現のマクロで、探索する行数範囲を指定することは可能でしょうか?

お世話になります。
たとえば、以下のような事例です。

10万行のテキストファイルがあったとします。

このとき、最初の100行以外はマッチするかチェックする必要がないとします。

その場合、最初の100行以内までに"北海道.*?雪国"という文字が含まれるかということを調べて100行だけで探索を打ち切るという書き方は可能でしょうか?

このように行数を指定することで、探索時間を大幅に減らしたいのです。
通常の書き方でやると、10万行全部調べるのでキリがない莫大な探索時間になります。

場合によっては、最終行の下から100行のみ探索して置換するなどです。

これはテキストエディタじたい、EmEditorだと高度→正規表現で検索する追加行数の設定というテキストエディタ一律の設定ではなく、マクロで各正規表現のコード単体に行数範囲が指定できますでしょうか?という質問になります。

よろしくお願いいたします。

追加です。

いつもありがとうございます。マクロを書いて頂きありがとうございます。

うまく動作しました。
速くなりました。

☆~★の範囲だけの範囲を指定して、その範囲だけ正規表現で検索や置換は可能でしょうか?
たとえば、5000万行とかになると、通常の凝った正規表現のやり方はかなり難しくなってきました。

特定の範囲だけを指定して、その範囲だけ探索や置換が出来たら劇的に速く、書き方も単純になります。

以下のような遅い書き方ではない方法になります。

batch_list.AddReplace(“\n”,”⏎”,eeFindReplaceRegExp,0);// シングルラインモード
for( i = 0; i < 200; ++i )
batch_list.AddReplace(“(☆[^⏎]?)◎⏎(.?★)”,”\1▼⏎\2″,eeFindReplaceRegExp | eeFindReplaceCase,0);// ◎を▼に変更
batch_list.AddReplace(“⏎”,”\n”,eeFin

事例サンプル 以下のような文書が数千万行あるとします。

あああああ◎←これは変更させません
いいいいい◎←これは変更させません

☆←この範囲内にある◎だけ▼に変更
青森◎
秋田◎
岩手◎
★←この範囲の◎だけ▼に変更

ううううう◎←これは変更させません
えええええ◎←これは変更させません

よろしくお願いいたします。

0

1Answer

最初の100行だけ a を検索する場合には、

document.selection.StartOfDocument();
Redraw = false;
document.selection.LineDown(true,100);
Redraw = true;
document.selection.Find("a",eeFindNext | eeFindReplaceSelOnly | eeFindReplaceRegExp ,0);

最後の100行だけ a を検索する場合には、

document.selection.EndOfDocument();
Redraw = false;
document.selection.LineUp(true,100);
Redraw = true;
document.selection.Find("a",eeFindPrevious | eeFindReplaceSelOnly | eeFindReplaceRegExp ,0);

とマクロを書いて実行してください。

1Like

Comments

  1. @Applekdz

    Questioner

    お世話になっております。
    御厚意、感謝しております。
    質問を追加させていただきました。
    よろしくお願いいたします。

Your answer might help someone💌