フォーラムの返信を作成しました。
- 作成者投稿
- ApplekParticipant
メールにします。
ApplekParticipantありがとうございます。
タイトルは「マクロのサイズを小さくする方法」ではなく「マクロをリンクファイル形式で高速化する方法 Windows11 24H2の問題対応」に変更をお願いいたします。
不具合については動画で撮って送らせていただきます。上記のリンクの方法はスレ記事を見た人のために書いておきます。
これは変換候補のファイルがマクロと同一のフォルダにある前提です。
拡張子を.jseeにしているのは、コメントに色が付いて見やすくなると言うだけの理由です。batch_list = editor.filters; batch_list.AddReplace(ScriptFullName.substr( 0, ScriptFullName.lastIndexOf( "\\" ) + 1 ) + "変換候補.txt.jsee", "", eeFindReplaceCase | eeFindReplaceRegExp, eeExFindLinkFile); document.selection.BatchReplace(batch_list, eeReplaceAll, 0);
ApplekParticipant回答ありがとうございます。
リンクの仕組みは理解しました。お気に入りの機能ですがマイマクロに含まれています。拡張子も.jseeです。
そのため同じマクロでも何度かやると登録されることがありますが反応が非常に悪いです。
そのため繰り返して登録されるかどうかですのでドラッグ&ドロップで登録できるとはほとんどの人は気がつかないと思います。
よろしくお願いいたします。ApplekParticipantリンクファイル形式はファイルサイズが少なく済むのでメリットも大きいですが以下のように途中で別の処理が必要になった場合はそのたびに途切れます。
再度作らなければなりません。document.selection.Find("∈[^∋]{0,15000}?∋",eeFindNext | eeFindReplaceRegExp | eeFindSelectAll,eeExFindRegexOnigmo);// 置換の検索範囲を指定
そのためひとつのファイルで全部記述しているのに比べて一括編集が出来なくなります。
最終的に完成品で今後保守する必要がない場合は最後に作れば良いだけですがそれ以外では実質的に出来ないです。
他のデメリットが多いからです。そのため両方のやり方の良いところ取りが出来るように改良してもらいたいです。
よろしくお願いいたします。ApplekParticipantありがとうございます。アドバイスいただいた方法でコメント含めて動作しました。
速度を測ったところ1割くらいは速くなる可能性はありそうですが期待するほど変わりませんでした。
複雑な正規表現マクロではあまり劇的な速度効果はなさそうです。●リンクファイルにしないままタブ形式で表記は可能でしょうか?
それ以外の記述の度にリンクしないと行けないので保守性としては別々のファイルになってめんどくさいです。●お気に入りに追加機能の不具合は御願いできますでしょうか?
よろしくお願いいたします。ApplekParticipantタブで区切るやり方ですが空白文字なのでやりにくいです。何か見える文字が代替できたほうがいいです。
よろしくお願いいたします。ApplekParticipant回答ありがとうございます。
まさに動作エラーはバックスラッシュの問題でした。
普通の記載に戻すとマクロは動作しました。別の問題が発生しています。
//
このマークの後ろのコメントで無効化しているはずのコードにまで反応してマクロが止まります。
そのためコメントになっているコードはすべて消さなければ動作しませんでした。
コメントを消すと普通に動きはしますが、これだと今後の保守性は極めて悪化するのでこの問題は解決しますでしょうか?
// から始まる後ろは一切反応してもらっては困ります。
/* */この範囲の無効化の記載も全部駄目になります。コメントで無効化も違うのでしょうか?
最終的にどれくらい速くなったか報告します。
よろしくお願いいたします。ApplekParticipantいろいろ試して分かりましたのはこのリンクファイルにして連続置換するのは大量のリストとかには向いてますが複雑な正規表現の置換が絡み合ったタイプには向いてないようです。
全部この方法にすれば爆速マクロになるのではないかと試しましたがリンクにすると正規表現の記載にエラーがあると多発してまともに動作しませんでした。この方法は単純なリストが何万行もあるとかのような方法には使えますが一般の正規表現マクロでは正規表現の記載方法の統一がされていないので使い回しが出来ない問題があります。
この問題は解決しますでしょうか?
よろしくお願いいたします。ApplekParticipantありがとうございます。リンクだと連続置換が爆速化したように感じます。
リンクの方法でWindows11 24H2でも以前のように大量の候補でも動作するようになりました。
リンクは一括置換だけかと思い込んでいました。やってみて連続置換なのに以前よりもリンクにすると猛烈に連続置換が速くなったように思います。
リンクファイルにすると連続置換も通常より速くなるのでしょうか?
これは多くの人は気がついていないと思います。
よろしくお願いいたします。ApplekParticipant以下の代替方法は可能でしょうか?
今回の24H2の改定は一回当たりに読み込ませて動作させる一回当たりの量に制限が出たというだけなので2回、次のマクロのボタンを押したことにすれば何工程でも行けます。
一回当たりの動作範囲のマクロの範囲を指定して、そのマクロ群が終わったら次のマクロを動作させるという新機能です。
これだと分割するだけのため24H2の制限は掛かりません。
よろしくお願いいたします。ApplekParticipantご回答ありがとうございます。御厚意、感謝しております。
この方法でいずれも単純な行数では動作はしましたが以下の問題で私のやりたいことが出来る代替にはなりませんでした。行が多いと
Maximum call stack size exceeded
このようなエラーが出ました。それから
for( i = 0; i < 20; ++i )
このようなコードがあると組み合わせて使えないようです。
以前の方法では動作していたのでなんとかなりませんでしょうか?
このままですとEmEditorでできることに大幅な制限が出来ます。Geminiの回答では以下のように出ました。
「Maximum call stack size exceeded」は、プログラミングにおいて、関数の呼び出しが深くなりすぎた場合に発生するエラーです。スタックとは
プログラムが関数を呼び出すとき、その関数の実行に必要な情報(引数、ローカル変数、戻り先アドレスなど)が「スタック」と呼ばれるメモリ領域に一時的に保存されます。関数が終了すると、スタックから情報が取り除かれ、呼び出し元の関数に戻ります。
エラーの原因
このエラーが発生する主な原因は、以下の2つです。
再帰呼び出しの無限ループ: 関数が自分自身を呼び出す「再帰呼び出し」において、終了条件が正しく設定されていない場合、関数が無限に呼び出され続け、スタックが溢れてしまいます。
非常に深い関数呼び出し: 再帰呼び出しでなくても、関数が非常に深くネストして呼び出される場合、スタックが溢れることがあります。
エラーの解決方法このエラーを解決するには、以下の方法を試してみてください。
再帰呼び出しの終了条件を見直す: 再帰呼び出しを使用している場合は、必ず終了条件が正しく設定されているか確認してください。
再帰呼び出しをループ処理に置き換える: 再帰呼び出しが必須でない場合は、ループ処理に置き換えることで、スタックオーバーフローを回避できる場合があります。
関数の呼び出し回数を減らす: 関数呼び出しのネストが深すぎる場合は、コードの構造を見直し、関数の呼び出し回数を減らすことを検討してください。
スタックサイズを増やす: 環境によっては、スタックサイズを増やすことでエラーを回避できる場合がありますが、根本的な解決にはなりません。
例以下は、再帰呼び出しの無限ループによって「Maximum call stack size exceeded」が発生する例です。
copy
def recursive_function():
recursive_function()recursive_function()
この例では、recursive_function関数が自分自身を無限に呼び出し続けるため、スタックが溢れてエラーが発生します。まとめ
「Maximum call stack size exceeded」エラーは、関数の呼び出しが深くなりすぎた場合に発生するエラーです。再帰呼び出しの無限ループや、非常に深い関数呼び出しが主な原因です。エラーを解決するには、再帰呼び出しの終了条件を見直したり、ループ処理に置き換えたり、関数の呼び出し回数を減らすなどの対策が必要です。
ApplekParticipantこのような同じ命令文は一括で書けることを説明したEmEditorマニュアルページを教えていただけますと幸いです。
ApplekParticipant最新バージョンからツールバーのマクロを右クリックしても編集という項目が出なくなりました。
この不具合だけでもめんどくさい手間が増えるので一苦労が増えます。
戻して頂けますでしょうか?
よろしくお願いいたします。ApplekParticipantおそらくドラッグ&ドロップしたときの位置とかが完全にかみ合わないと反応しないのだと思います。
ApplekParticipantマクロを動作させるのツールバーですが最新版のEmEditorでは右クリックすると「キーボードショートカットキーの割当」と出て以前は編集と選べたのが出なくなっています。
ムチャクチャ使いにくくなりました。不具合でしょうか?
よろしくお願いいたします。ApplekParticipantありがとうございます。
再度省略せずに書いて頂けませんでしょうか?
記載が省略されているのでうまく書けず動きませんでした。以下の連続置換のパターンです。
batch_list.AddReplace(“タロウ”,”太郎”,eeFindReplaceRegExp | eeFindReplaceCase,0);
これを
∈タロウ∮太郎∋
これにする方法です。よろしくお願いいたします。batch_list = editor.filters; batch_list.AddReplace("タロウ","太郎",eeFindReplaceRegExp | eeFindReplaceCase,0); // このパターンが数万続く document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);
ApplekParticipantとくにマクロファイルのマクロとしてのツールバーへの登録がうまく動作しない確率が高いです。
ブラウザのように確実に反応するように変更をお願いいたします。ApplekParticipantお気に入りにテキストファイルを登録することも出来ましたが、これも確実性が低いです。
本来は100%登録できないと行けないのが出来ない確率が高いです。反応が鈍いです。何回もドラッグ&ドロップする必要があります。
宜しくお願いします。ApplekParticipant動作の安定性とはマクロがドラッグ&ドロップでツールバーに登録できるときもありますがスムーズに登録できないことが多いという意味です。
ApplekParticipantありがとうございます。
ドラッグ&ドロップでマクロが登録できるときもありますが、出来ないときが多いです。
一応可能にはなっているようですが動作の安定性が悪いようです。
それから一度ツールバーに登録したマクロを削除することが右クリックで出来ないようです。
キーボードのショートカットキーの割当だけが出ますが削除も出来る必要があります。
まだ使いにくいままです。
宜しくお願いします。ApplekParticipantbatch_list.AddReplace(“”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);
これは71文字なので実質的に20分の1くらいのサイズになったマクロに出来るはずです。ApplekParticipantこの掲示板の編集は投稿後、他の人が書き込むまでか数時間は出来るようにして頂きたいです。
ぶっきらぼうな書き方になってしまいました。メールで質問しましたようにWindows11→メールで質問させていただました件です。Windows11
よろしくお願いいたします。
ApplekParticipantお世話になっております。
ありがとうございます。
909にしましたが私のほうでは動きませんでした。普通のWindowsのアイコンだと前から出来ていますがWindowsの仕様でアイコンの位置が意地悪婆さんのようにランダムに変わる不具合があるのでボタン式にしています。
そちわの設定では動作しませんでした。
よろしくお願いいたします。ApplekParticipantありがとうございます。動きました。
無題ファイル、拡張子無しや他の複数の拡張子も登録する場合はどう書けばいけますでしょうか?
編集中のファイルは対象外になりますでしょうか?
よろしくお願いいたします。ApplekParticipant拡張子無しと複数の拡張子のファイルを一括で閉じるマクロを書きたいのですが各社AIは「EmEditorではコマンドで用意されていない」と回答します。
よろしくお願いいたします。 - 作成者投稿