フォーラムの返信を作成しました。

26 件の投稿を表示中 (合計 106 個)
  • 作成者
    投稿
  • 返信先: マクロの論理矛盾の検出機能要望 #31538
    Applek
    参加者

    EmEditorの正規表現は、固定長以外の(?<=.*?)。

    これが使えないので、常にキャプチャーで一致させる必要があります。
    そのため$1などの番号を書き忘れたときの損失は非常に損失が大きく、多く起きやすいです。

    以下の書き方が可能であれば書き忘れてもたった1文字の消失で済みますがEmEditorではできません。
    batch_list.AddReplace(“(?<=太郎.*?)の(?=犬小屋.*?。)”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);

    このような理由でEmEditorは常に一致で長くキャプチャーしないといけない仕様のためミスしたときはキャプチャー部分まで消失し、損失は大きいです。
    なおさらこの機能が必要になります。

    Applek
    参加者

    今気がつきましたが、この掲示板は投稿直後に”編集”と言う赤字の機能を使っても反映しないようです。

    Applek
    参加者

    回答ありがとうございます。
    不具合ではないかもしれませんが、書いたつもりで居るのに閉じ忘れだと、”西”は変換しているつもりでされないまま終わるわけで警告で教えてくれても良いと思います。
    よろしくお願いいたします。

    Applek
    参加者

    連続置換ではないほうです。if( !document.selection.Replace
    こっちのほうが動きませんでした。
    よろしくお願いいたします。

    Applek
    参加者

    ありがとうございます。
    試しましたがうまく動作しませんでした。
    何が考えられますでしょうか?

    Applek
    参加者

    回答ありがとうございます。
    for( i = 0; i < 20; ++i ){if( !batch_list.AddReplace("(^.*?)太郎(.*?∂)","$1タロウ$2",eeFindReplaceRegExp | eeFindReplaceCase,0) ) {break;}}
    このように連続置換としても書けますでしょうか?
    よろしくお願いいたします。

    Applek
    参加者

    バージョンし忘れていたようです。
    出来ました。
    ありがとうございます。

    Applek
    参加者

    ありがとうございます。
    やってみたのですが、まだ利きませんでした。
    Meryでは同じやり方で反応しているので何か違いますでしょうか?
    よろしくお願いいたします。

    返信先: document.selection.Collapse();で解除されない #31513
    Applek
    参加者

    ありがとうございます。
    希望通りの動作になっています。
    御厚意、感謝しております。

    返信先: document.selection.Collapse();で解除されない #31507
    Applek
    参加者

    ありがとうございます。
    改善して頂けるということで御厚意、感謝しております。
    document.selection.SetActivePoint(eePosLogical, 1, 1); これも無しで
    document.selection.Collapse();これだけで動作するようにお願いします。
    よろしくお願いいたします。

    返信先: document.selection.Collapse();で解除されない #31505
    Applek
    参加者

    メールの件です。
    そうでしたか。

    いずれにしても
    document.selection.Collapse();//選択範囲のブルー反転を解除させる。
    document.selection.SetActivePoint(eePosLogical, 1, 1); ←これをコメントアウトすれば結果は変わります。

    この二つの動作を兼用させれば今のコードでも完璧に動作しておりますし何の不具合も一度もありません。
    説明されているdocument.selection.SetActivePoint(eePosLogical, 1, 1); このコードをどこかにつけないといけないということ自体が一般人には難しすぎます。

    それと選択の範囲がなかった場合の動作ですが、これは文書によっては範囲がひとつも発生しない場合と多い場合の両方があります。
    何の箇所がどれだけあるかというのは文書次第で念のためにいろいろ書いておくものです。

    処理する文書は毎回違うわけでどちらの場合であっても対応できるように作っています。

    範囲となる箇所がゼロである文書も当然存在するわけですが両方兼用して同じように動かせるという意味ではマクロが止まってもらっては困ります。
    説明されているような、対象箇所がゼロの場合の書き方というのは私は教えてもらいましたから可能ですが他の人が気がつくとは思いません。
    現在の止まらないままで上記のコードを兼用した動作に変えてもらったほうがいいと思います。
    初心者が一番簡単な方法が最善だと思います。
    一般の人間が複雑な書き方をわかるはずがなく、そうしないと余計にこの問題で難易度が上がって一般人には難しい仕様になるためです。
    document.selection.Collapse();これじたいに画面をクリックして解消するという機能にすれば簡単になるのに、なぜ逆に難しく変更されるのでしょうか?
    それと制御文字などを消すだけ結果が変わることは謎です。

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

    返信先: 正規表現の否定後読み #31500
    Applek
    参加者

    ご回答ありがとうございます。
    今やってみたら(?<!va)Scriptのほうは動いてました。
    勘違いだったかも知れません。

    2番目の質問はそうでしたか。
    秀丸では動いてますので、鬼雲の仕様としてもかなり使いにくいです。
    だとするといちいちキャプチャー扱いにして使うしかない感じでしょうか?
    キャプチャー形式だと動きますが、動作が無駄に重くなると思います。
    EmEditorのほうで対応して頂くことは可能でしょうか?

    返信先: 正規表現の否定後読み #31496
    Applek
    参加者

    batch_list.AddReplace(“(♂.*?)。”,”$1″,eeFindReplaceRegExp | eeFindReplaceCase,0);

    仕方なく、このようにすればEmEditorで動いてますが、無駄にキャプチャーして重くなり、書き方もめんどくさくなります。
    よろしくお願いいたします。

    返信先: 正規表現の否定後読み #31495
    Applek
    参加者

    1番目の投稿はMeryでも普通にヒットしました。
    2番目の投稿はMeryでは反応無しでした。

    秀丸はどちらも普通にヒットしてます。
    EmEditorは両方動かなかったです。
    よろしくお願いいたします。

    返信先: 正規表現の否定後読み #31494
    Applek
    参加者

    以下の動作もおかしいです。鬼雲です。

    これで検索します。
    (?<=♂.*?)。

    検索対象
    ♂ありがとうございます。

    秀丸なら”。”だけがちゃんと検索にヒットしますが、EmEditorでは構文エラーになってヒットしません。
    マクロでも止まります。
    これはどういう意味でしょうか?
    これについてはサクラエディタでもダメでした。
    ちゃんと書いているつもりですが、何が構文エラーでしょうか?
    ご確認お願いします。
    よろしくお願いいたします。

    Applek
    参加者

    回答ありがとうございます。
    設定の定義のプロパティで拡張子ごとに自動バックアップの設定ができるということがわかりました。
    これはたどり着くのが極めて難しいです。
    攻略本を読み込まないと気づけないような難しさです。

    ただ単に自動バックアップの項目から「以下の拡張子のみにする」とか自分で拡張子設定を記載するのだと見ただけで直感的にすぐわかります。
    それと私が使っているファイルなどはこの一覧にも存在しない拡張子なので自分で自動バックアップの対象にしたい拡張子を書いて登録したほうが、何種類でもすぐに登録できて早いです。
    よろしくお願いいたします。

    Applek
    参加者

    回答ありがとうございます。
    ツールのメニューに [設定の定義] というのは見見つかりましたがやり方がわかりませんでした。
    別の項目にある方法よりも自動バックアップの部分で「指定した拡張子ファイルのみ自動バックアップを取る」「行数指定」としたほうがすぐわかるのではないでしょうか?

    それだと.jseeとか書き足すだけで済みます。
    よろしくお願いいたします。

    返信先: document.selection.Collapse();で解除されない #31487
    Applek
    参加者

    サンプルを作成しようと思って作ってはいますが、原因になっている不正文字などをそのままコピペしてひとつ入れたら再現するという単純なことではないようです。
    複数の要因で発生しているようです。
    私が使っている内容でも同じ不正文字があったとしても発生しないことも多いです。
    全部の因果関係はまだわかりません。

    返信先: document.selection.Collapse();で解除されない #31486
    Applek
    参加者

    前後の話がおかしくなりました。これらの文字とは一部の制御文字や不正文字の一部です。

    返信先: document.selection.Collapse();で解除されない #31485
    Applek
    参加者

    お世話になり、ありがとうございます。
    原因が特定できました。
    この現象はまったく普通に使われるような文字では起きないようです。
    再現マクロはこれらの文字を故意に前後に入れてやると解除されないことが発生するはずです。
    前後に入れて試してみてください。
    すべての制御文字かどうかはわかりません。
    制御文字など表示が正しく行われない□で表示される文字などが前後にあるときにも発生する現象のようですが□で表示される文字すべてではありません。

    少しずつ文字を削っていって現象が発生する時と発生しない時を比較していたら制御文字などある特定の文字を消したところからは発生しないということがわかりました。
    現象が起きるのは制御文字だけでなく不正な文字も含まれますが、全ての文字種類は特定出来ていません。

    これらを取り除いて置換してみると通常の思惑どうりの範囲指定のみの置換結果になります。
    私がやっていますように画面をクリックすると言う動作を組み合わせることによって今回のような場合も完全に範囲が解除されますのでその方法で修正してください。
    document.selection.Collapse();
    document.selection.SetActivePoint(eePosLogical, 1, 1);//画面をクリック
    EmEditorの変更で仕様をこのふたつを組み合わせて動作させるようにしてください。

    返信先: document.selection.Collapse();で解除されない #31484
    Applek
    参加者

    ご回答ありがとうございます。
    今回の事例が発生するパターンで試しましたら、結果は同じでした。
    同期、非同期、どちらの設定でも起きるようです。
    御厚意、感謝しております。

    返信先: document.selection.Collapse();で解除されない #31482
    Applek
    参加者

    ためしにこれはコメントアウトして// document.selection.Collapse();

    こっちだけ単独でやると全然解除されてませんでした。 document.selection.SetActivePoint(eePosLogical, 1, 6);//

    なぜか法則は不明ですが組み合わせて二つ続けないと解除されない場合がまれにあります。
    ただ、99%以上の箇所ではdocument.selection.Collapse();これだけでマニュアルどおりに正常に解除されています。

    返信先: document.selection.Collapse();で解除されない #31481
    Applek
    参加者

    回答ありがとうございます。
    私の使い方は特定範囲の置換と全般の置換を交合にしてます。

    document.selection.BatchReplace(batch_list,eeFindReplaceSelOnly | eeReplaceAll,0);これで特定の範囲のみ置換して
    document.selection.Collapse();// 選択範囲のブルー反転を解除させる
    これで特定範囲の置換終わり
    次に全般の普通の置換をしてます。
    batch_list = editor.filters;
    batch_list.AddReplace(“”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);
    document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);これは全般に置換するときに使っているコードです。

    不具合のパターンを検証します。

    返信先: document.selection.Collapse();で解除されない #31475
    Applek
    参加者

    しばらくテストしているのですが前後の文字数などによって起きたり起きなかったりする結果が変わります。
    そのためサンプルマクロで簡単に書いて再現させるということが難しいです。
    何かしらの組み合わせの原因で選択範囲が完全に解除されないままマクロが進行する現象が時々起きるようです。

    いずれにしてもdocument.selection.SetActivePoint(eePosLogical, 1, 6);このコードと組み合わせて動かせば完全に意図通りの動作をしており、何億字でも不具合は出ていません。

    返信先: document.selection.Collapse();で解除されない #31474
    Applek
    参加者

    回答ありがとうございます。
    私はdocument.selection.BatchReplace(batch_list,eeFindReplaceSelOnly | eeReplaceAll,eeExFindRegexOnigmo);このコードは使っていないです。
    そのため今回の不具合のパターンとは因果関係が違います。

    以下が実際に不具合が起きているマクロです
    よろしくお願いいたします。

    document.selection.Find(“∈[^∈∋]{0,15000}?∋”,eeFindNext | eeFindReplaceRegExp | eeFindSelectAll,eeExFindRegexOnigmo);// 置換の検索範囲を指定
    batch_list = editor.filters;
    batch_list.AddReplace(“”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);
    document.selection.BatchReplace(batch_list,eeFindReplaceSelOnly | eeReplaceAll,0);
    document.selection.Collapse();// 選択範囲のブルー反転を解除させる
    // document.selection.SetActivePoint(eePosLogical, 1, 6);// ブルー反転を解除させる
    以下は
    batch_list = editor.filters;
    batch_list.AddReplace(“”,””,eeFindReplaceRegExp | eeFindReplaceCase,0);
    document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo);

    そのためdocument.selection.BatchReplace(batch_list,eeFindReplaceSelOnly | eeReplaceAll,eeExFindRegexOnigmo);これは使っていないです。

26 件の投稿を表示中 (合計 106 個)