フォーラムの返信を作成しました。
- 作成者投稿
- Applek参加者
区切り方だけで速度が大きく変わることについては、比較のサンプルマクロが必要でしたら準備して送ります。
これらは、EmEditor側で内部アルゴリズムでコードを把握して自動調整すると最速になると思います。Applek参加者ありがとうございます。
わかりました。
正規表現は連続置換にします。以前の過去のバージョンアップ記事を読み込むと1回のバージョンアップで速度が何百倍とかに速度アップしている事例が多数ありました。
連続置換自体もまだ速くなる余地はありそうでしょうか?私が気がついている限りでは、前の質問で書いたことと重複しますが、
数十万の置換を並べた場合だと1回で閉じるよりも2000個くらいで一度区切りでそれを繰り返した方がはるかに速くなります。
書き方を変えるだけでも速度が変化しますが、おそらく、これは試行錯誤した人しか気がつかないです。
batch_list = editor.filters;
2000個くらいの置換
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);これくらいに一度閉じてやったほうがかなり速くなります。
このことから、動作のアルゴリズムでユーザーがコードを書いていなくても2000回くらいで区切った扱いとして処理すると1回閉じでも速くなると思います。
よろしくお願いいたします。Applek参加者ありがとうございます。
毎回1個書くごとに毎回閉じないといけない仕様と言うことがわかりました。
その書き方でもトータルで速くなれば良いです。
連続置換だと毎回1個のファイルをやるのに終わるまで10分とかかかります。
おそらく私はEmEditorの使っている人のなかではかなりヘビーな動作をさせているほうだと思います。
ひとつのファルだけでEmEditorでマクロが終わるまで30分以上かかるものが多数あります。
今まで書いたのは、ほとんどの動作はOnigmoでしか動かない\\p{Han}とかの組み合わせコードで書いているので、本格的な動作はまだできない状況です。
よろしくお願いいたします。Applek参加者ありがとうございます。
前の連続置換との一括置換の動作の違いを質問させて頂きます。
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);
この連続置換のときと違って続けて並べて書くことはできないのでしょうか?以下のようだと北海道までで処理が止まります。
batch_list = editor.filters;
batch_list.AddReplace(“ほっかいどう”,”北海道”,eeFindReplaceRegExp,0);
batch_list.AddReplace(“北海道”,”ホッカイドウ”,eeFindReplaceRegExp,0);
batch_list.AddReplace(“ホッカイドウ”,”太郎”,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);以下の場合は、ほっかいどうから始まって、太郎まで変換します。
こんな感じで毎回1処理ずつ囲まないといけなくなりましたでしょうか?よろしくお願いいたします。batch_list = editor.filters;batch_list.AddReplace(“ほっかいど.”,”北海道”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);
batch_list = editor.filters;batch_list.AddReplace(“北海.”,”ホッカイドウ”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);
batch_list = editor.filters;batch_list.AddReplace(“ホッカイド.”,”太郎”,eeFindReplaceRegExp,0);document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexBoost | eeExFindMulti);Applek参加者バージョンアップありがとうございます。
さっそく最新バージョンを使わせていただいているいるのですが、以下のマクロが同じ動作結果にはならないのは仕様でしょうか?以下のようなサンプルです。
動作テストをするとまったく違う結果になるのは仕様でしょうか?
よろしくお願いいたします。動作テスト対象文
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり
ののののののののののののののほっかいどうりりりりりりりりりりりりりりりり新しい機能のマクロ
batch_list = editor.filters;
batch_list.AddReplace(“^(.*?)ほっかいどう(.*?)$”,”\\1北海道\\2″,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);// 新バージョンの書き方通常の以前のやり方の置換
batch_list = editor.filters;
batch_list.AddReplace(“^(.*?)ほっかいどう(.*?)$”,”\\1北海道\\2″,eeFindReplaceRegExp,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);Applek参加者お世話になっております。
追加です。
半角全角を区別しないを組み合わせるとほっかいドウ
ホッカイどう
これらもマッチすることになります。Applek参加者バージョンアップありがとうございます。
すべて一括置換は正規表現は、対応してないというのは、これは技術的に不可能なのか、それとも最初の段階では、とりあえず通常の置換だけに対応して随時、正規表現も対応へとバージョンアップしていくという予定でしょうか?
正規表現も含めて6000倍とかになったこれは、凄いことです。
よろしくお願いいたします。 - 作成者投稿