タグ: 一括置換
- 作成者投稿
- 2023年1月21日 11:23 am #30961Applek参加者
お世話になっております。
マクロ実行時にマクロの記述にエラーがないか実行時に毎回チェックするのをオフに出来ませんでしょうか?
以下のような記述で莫大な一括置換候補がある場合は、実行ボタンを押すと砂時計のままになります。
〝マクロが正しく書かれているかを確認しない〟という設定項目を追加してもらいたいです。
それがないとdocument.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);の莫大な変換候補が一瞬で置換できる機能の本領が発揮できないです。
よろしくお願いいたします。batch_list = editor.filters;
ここの一括置換候補が数百万だとマクロが砂時計のまま開始しませんでした。
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);2023年1月21日 12:44 pm #30962Applek参加者それとマクロ途中のエラーで「正規表現で一致しない(と)が含まれています」などのエラーが出たときは、その行をコピーするというボタンの機能を付けてもらいたいです。
2023年1月22日 1:13 pm #30963Applek参加者お世話になっております。
動かないのは、正規表現ではなく、
batch_list.AddReplace(“あおもり”,”青森”,eeFindReplaceRegExp | eeFindReplaceCase,0);みたいな単純な置換が数百万候補になります。
よろしくお願いいたします。2023年1月23日 7:37 pm #30964Applek参加者お世話になっております。
https://jp.emeditor.com/emeditor-core/emeditor-v21-6-0-%e3%82%92%e5%85%ac%e9%96%8b%e3%81%97%e3%81%be%e3%81%97%e3%81%9f-%e3%83%86%e3%82%af%e3%83%8b%e3%82%ab%e3%83%ab-%e3%83%ac%e3%83%93%e3%83%a5%e3%83%bc%e3%82%92%e5%90%ab%e3%82%80/
メールでこのページを案内して頂きましたが、この問題の解決方法は、わかりませんでした。
私が理解できていないということでしたら申し訳ございませんでした。
よろしくお願いいたします。2023年1月24日 1:37 am #30965Yutaka Emuraキーマスターいつもお世話になっております。江村です。
ご質問を明確にしてください。数百万といっても、200万個なのか 900万個なのかによって、またコンピュータのメモリ容量、その他の条件によっても結果は大きく異なります。V8 なのか、JScript なのか、同期なのか非同期なのかによっても異なります。
ご質問を誤解しているといけないため、お手数ですが、こちらで問題の再現テストを行うため、できるだけ単純化したマクロのコード全体を書いてください。
できるだけ同じ条件でテストを行いたいため、よろしくお願いいたします。
2023年1月25日 1:15 am #30967Applek参加者お世話になっております。
前に教えて頂いた以下のリンクテキストだとすぐ動きました。
リンクではなく、直接マクロファイルに書いたままでは、すぐに動作するのは、無理なのでしょうか?リンクだと相対パスも可能でしょうか?
それと、複数の候補があったうち、長い対象と短い対象があった場合は、どちらが優先されるのでしょうか?
たとえば、”オーストラリア”と”オーストラ”があった場合は、
“オーストラりあ”と変換されます。
短い候補が優先されるということになりますでしょうか?
これは、どちらも候補があったときは短いものを適応すると決まっているのでしょうか?
よろしくお願いいたします。batch_list = editor.filters;
batch_list.AddReplace(“C:\\Test2\\カタカナへ変換.txt”,””,eeFindReplaceCase | eeFindReplaceRegExp,eeExFindLinkFile);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);2023年1月25日 1:19 am #30968Applek参加者お世話になっております。
以下のように直接書いても動くようになりませんでしょうか?
よろしくお願いいたします。batch_list = editor.filters;
おーすとらりあ オーストラリア
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);2023年1月25日 2:56 am #30969Yutaka Emuraキーマスターいつもお世話になっております。江村です。
> リンクではなく、直接マクロファイルに書いたままでは、すぐに動作するのは、無理なのでしょうか?
プログラム的なことなので詳細は省きますが、これは非常に難しいです。
> リンクだと相対パスも可能でしょうか?
可能です。EmEditor.exe の存在するフォルダからの相対パスになります。また、%USERPROFILE% などの環境変数を使用することもできます。
> それと、複数の候補があったうち、長い対象と短い対象があった場合は、どちらが優先されるのでしょうか?
短い方が優先されます。ただし、[単語のみ検索する] が設定されている場合には、この限りではありませんが、遅くなります。
> これは、どちらも候補があったときは短いものを適応すると決まっているのでしょうか?
その通りです。[単語のみ検索する]、その他のオプションが設定されていない場合、長い方の文字列は無視されます。
> 以下のように直接書いても動くようになりませんでしょうか?
動くようになりません。
よろしくお願いいたします。
2023年1月25日 10:01 am #30974Applek参加者ご回答ありがとうございます。
リンクファイルタブ区切りだと440万候補が2秒くらいで置換できてます。ありがとうございます。
〝競合する候補があるときは長い方を優先する〟という機能を付けてもらいたいです。そうしないと長い候補からリンクファイルを分離して作らないといけないので、メンテがかなりの負担になります。
一旦document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);とかで閉じるだけで別の書き方に変えれる混在書きができるようにしたいのです。以下のようにマクロのファイルだけで普通の置換のときのように作れましたら、
一旦、document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);で閉じるということをやって区切れば、優先順位が付けられて、いけますが、リンクでないと動作しないとなると、いちいち複数ファイルで管理していかないといけなくなりますので実用的ではないです。
一発つくればメンテ不要の場合だと今のEmEditorのやり方でもできますが、たいていは、使う度にメンテします。莫大な候補をひとつのマクロファイルで書いてやるより、かなり手間がかかります。
このようなメンテナンス上の難になる理由があるためにひとつのファイルにbatch_list.AddReplace(“”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);この形式で従来通りに一括置換も書きたいのです。>その通りです。[単語のみ検索する]、その他のオプションが設定されていない場合、長い方の文字列は無視されます。
これは一旦document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);で閉じて区切れば解決しますので、マクロファイルに直接書く必要があります。
このやり方で少ない項目(7万行くらい)だとこれで普通に動作して閉じるだけで混在書きもできて通常動作していますがマクロが数百万候補になると砂時計のまま止まります。
通常の書き方と同じように一瞬で動いてもらいたいです。
通常の従来の書き方でひとつのファイルで管理できるほうがメンテがラクです。一括同じリンクファイルで長いほうか短いほうを優先されるかは選択できるようになりませんでしょうか?
以下のような書き方でも動作はしていますので砂時計待ちがなくなるだけでいけます。
batch_list = editor.filters;
batch_list.AddReplace(“あおもり”,”青森”,eeFindReplaceRegExp | eeFindReplaceCase,0);
document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo | eeExFindMulti);このような書き方で大量に書いた場合にマクロが砂時計になって止まるというメールでsampleで送らせて頂きました問題は解決しますでしょうか?
大量の候補があるのは、eeExFindMultiでない使い方もあるためです。
リンクだと個々の単語にメンテをしたくなったときの手間が増えます。
途中の行から通常のdocument.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);を混在した書き方も出来ないですが、ひとつのマクロファイルだけで可能なら区切るだけで混在した書き方のメンテナンスができます。
そのような理由のためリンクファイルにしなくても速く動くように御願いしたいのです。
メールで送らせて頂いた書き方で、砂時計待ちにならないようになれば使えます。よろしくお願いいたします。
2023年1月25日 11:02 am #30976Applek参加者お世話になっております。
インクルードのときは、マクロが同じフォルダにあれば、
#include “カタカナへ変換.jess”
このように書くと動作したのですが、batch_list.AddReplace(“カタカナへ変換.txt”,””,eeFindReplaceCase | eeFindReplaceRegExp,eeExFindLinkFile);
一括置換のリンクは、このように書くだけで相対パス扱いにはならないのでしょうか?
あるのに見つからないと出ます。よろしくお願いいたします。
2023年1月25日 11:34 am #30977Yutaka Emuraキーマスターいつもお世話になっております。江村です。
> このような書き方で大量に書いた場合にマクロが砂時計になって止まるというメールでsampleで送らせて頂きました問題は解決しますでしょうか?
メールは届き、実際にそのマクロを使用して再現テストを行いました。問題は再現しましたが、これを速くするのは難しいということです。
よろしくお願いいたします。
2023年1月25日 12:47 pm #30978Applek参加者ご回答ありがとうございます。
>EmEditor.exe の存在するフォルダからの相対パスになります。
インクルードのときは、マクロと同じフォルダでいけましたが、今回も同様になりませんでしょうか?
メンテの問題で、マクロと同一フォルダで以下のように書きたいです。
batch_list.AddReplace(“カタカナへ変換.txt”,””,eeFindReplaceCase | eeFindReplaceRegExp,eeExFindLinkFile);よろしくお願いいたします。
2023年1月25日 1:49 pm #30979Yutaka Emuraキーマスターいつもお世話になっております。江村です。
> インクルードのときは、マクロと同じフォルダでいけましたが、今回も同様になりませんでしょうか?
同様になりません。
マクロと同じフォルダのファイルを指定したい場合は、次のように書くことができます。
ScriptFullName.substr( 0, ScriptFullName.lastIndexOf( "\\" ) ) + "\\カタカナへ変換.txt"
よろしくお願いいたします。
2023年1月25日 2:36 pm #30981Applek参加者ご回答ありがとうございます。
動きました。これで従来のインクルードと同様に出来まして便利です。ありがとうございます。●競合するときは、文字数が長いほうを優先するという設定の要望は、可能でしょうか?
それとも分離して動作させるしかないのでしょうか?よろしくお願いいたします。
2023年1月25日 2:49 pm #30982Applek参加者お世話になっております。
>[単語のみ検索する] が設定されている場合には、この限りではありませんが、遅くなります。
設定は出来るが、遅くなりますという回答になりますでしょうか?
その場合はどれくらい遅くなりますでしょうか?通常のdocument.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);よりは速いでしょうか?
EmEditor側の設定ではなく、そのマクロの時だけそのように動作させるのをマクロで記述することは可能でしょうか?よろしくお願いいたします。
2023年1月25日 2:57 pm #30983Applek参加者こちらにありました。すみません。
https://www.emeditor.org/ja/cmd_search_findbar_only_word.html
[単語のみ検索する (検索ツール バー)] コマンド
概要
検索ツール バーの [単語のみ検索する] ボタンのオン/オフを切り替えます。説明
検索ツール バーの [単語のみ検索する] ボタンのオン/オフを切り替えます。実行方法
•既定のメニュー: なし•すべてのコマンド: [検索] – [検索ツール バー] – [単語のみ検索する]
•ツール バー: find_only_word (検索ツール バー)
•ステータス バー: なし
•既定のショートカット: なし
プラグイン コマンド ID
•EEID_FINDBAR_ONLY_WORD (4576)マクロ
[JavaScript]
editor.ExecuteCommandByID(4576);[VBScript]
editor.ExecuteCommandByID 45762023年1月26日 4:33 am #30984Applek参加者お世話になっております。
単語のみ検索するにしても、長い行が優先される効果は、なかったようです。
一括置換で〝長い方を優先する〟という機能はつけてもらえませんでしょうか?それとも分離して長い方を先にやるしかないでしょうか?
よろしくお願いいたします。2023年1月26日 11:04 am #30987Applek参加者お世話になっております。
ScriptFullName.substr( 0, ScriptFullName.lastIndexOf( “\\” ) ) + “\\カタカナへ変換.txtこれで書きますとリンクが利かなくなっていました。
#include “”のときのようにリンクを利くようにしてもらいたいです。これですと、メンテする度に、開くからファイルを開かないといけなくなります。
通常の#include “”のときのように、マクロのフォルダのまま認識する仕様変更になりませんでしょうか?
上記のような書き方は通常の相対パスと違うため特別に教えてもらった人しか書くのは無理だと思います。よろしくお願いいたします。
2023年1月27日 12:01 am #30988Yutaka Emuraキーマスターいつもお世話になっております。江村です。
> 設定は出来るが、遅くなりますという回答になりますでしょうか?
> その場合はどれくらい遅くなりますでしょうか?通常のdocument.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);よりは速いでしょうか?
> EmEditor側の設定ではなく、そのマクロの時だけそのように動作させるのをマクロで記述することは可能でしょうか?環境によって結果は異なりますので、ご自分でお試しいただき、それでも疑問点がありましたら、ご質問内容を整理、明確化してから、お問い合わせください。
> 一括置換で〝長い方を優先する〟という機能はつけてもらえませんでしょうか?
> それとも分離して長い方を先にやるしかないでしょうか?技術的な詳細は省きますが、長い方を先に行ってください。重複する部分文字列を検出して警告する機能を追加してほしい、という要望でしたら検討しておきます。
> これで書きますとリンクが利かなくなっていました。
> #include “”のときのようにリンクを利くようにしてもらいたいです。ScriptFullName.substr( 0, ScriptFullName.lastIndexOf( "\\" ) + 1 ) + "カタカナへ変換.txt"
とすればハイパーリンクが利くようになります。
> 上記のような書き方は通常の相対パスと違うため特別に教えてもらった人しか書くのは無理だと思います。
この方法はヘルプにも追記しておきます。
よろしくお願いいたします。
2023年1月30日 11:47 am #31000Applek参加者お世話になっております。
ご回答ありがとうございます。
御厚意、感謝しております。 - 作成者投稿
- このトピックに返信するにはログインしてください。