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を使ったビックデータの順番入れ替え機能について

正規表現を使わない順の入れ替えについてです。

またこの機能を削除、入れ替え機能で簡単にダイアログを入れるだけで範囲削除、入れ替えが出来てマクロが録画される機能を希望です。

サンプル


ままま


たたた

マクロ実行後 順番が入れ替わります


たたた


ままま

0

1Answer

次のマクロを実行してください。

function SwapBetween( c1, c2, c3, c4 )
{
    document.selection.StartOfDocument(false);
    
    while( document.selection.Find(c1,eeFindNext | eeFindReplaceCase,0) ) {
        editor.ExecuteCommandByID(4153);  // 文字選択を開始
        if( !document.selection.Find(c2,eeFindNext | eeFindReplaceCase,0) ) {  
            alert( "Cannot find " + c2 + " for " + c1 );  // c1 に対応する c2 が見つからない場合にメッセージを表示する
            return;
        }
        str1 = document.selection.Text;

        x1 = document.selection.GetAnchorPointX( eePosLogical );
        y1 = document.selection.GetAnchorPointY( eePosLogical );
        x2 = document.selection.GetActivePointX( eePosLogical );
        y2 = document.selection.GetActivePointY( eePosLogical );
        document.selection.Collapse();

        if( !document.selection.Find(c3,eeFindNext | eeFindReplaceCase,0) ) {
            return;
        }
        
        editor.ExecuteCommandByID(4153);  // 文字選択を開始
        if( !document.selection.Find(c4,eeFindNext | eeFindReplaceCase,0) ) {  
            alert( "Cannot find " + c4 + " for " + c3 );  // c3 に対応する c4 が見つからない場合にメッセージを表示する
            return;
        }
        str2 = document.selection.Text;

        document.selection.Delete();
        document.selection.Collapse();
        document.selection.Text = str1;
        
        document.selection.SetActivePoint( eePosLogical, x1, y1 );
        document.selection.SetActivePoint( eePosLogical, x2, y2, true );
        document.selection.Text = str2;
        
        if( !document.selection.Find(c2,eeFindNext | eeFindReplaceCase,0) ) {  // find c2 again
            alert( "unexpected error" );
            return;
        }
        document.selection.Collapse();
    }
}

// 元に戻るを破棄して速度優先
DiscardUndo = true;
Redraw = false;

SwapBetween( "☆", "★", "●", "○" );

マクロを実行する方法は、以下の通りです。

  1. 上記のマクロを、適当なファイル名、例えば MyMacro.jsee という名前で保存します。
  2. EmEditor の [マクロ] メニューの [選択] から、保存したマクロを選択します。
  3. 編集したいテキスト ファイルを開き、そのファイルがアクティブ状態で、[マクロ] メニューの [実行] (または Ctrl+Shift+P) を選択します。すると、マクロが実行されます。
1Like

Comments

  1. @Applekdz

    Questioner

    マクロを書いて頂きありがとうございます。
    出来ました。

Your answer might help someone💌