【サクラエディタ】1ファイル内一括置換マクロ【画像サンプルあり】

快速ワーク
スポンサーリンク

サクラエディタで1ファイル内の文字列に対し、複数ワードで一括置換するマクロを作ってみました。

サクラエディタはいろんな言語のプログラムを起動できますが、とりあえずJavaScriptです。

カスタマイズすれば、いろいろ目的に合った使い方ができると思います。

ぜひ使ってみてください。


スポンサーリンク

サクラエディタマクロ(JavaScript)の操作イメージ

1ファイル内の文字列を対象に複数文字列を一括で置換するイメージ映像です。


サクラエディタマクロ(JavaScript)の主な仕様

細かい処理はコメントで補足してるので、ザックリとした仕様を箇条書きで記載します。

  • タブで区切られた置換前文字列と置換後文字列を複数行選択
  • 上から下に選択した位置となる現在行以降を置換対象とする(下から上に選択はNG)
  • 1ファイル内の複数文字列を繰り返し一括で置換する



サクラエディタマクロ(JavaScript)ののソースコード

下記のソースを全てコピーし、1ファイルにまとめてサクラエディタから起動してください。

エクセルなどで置換前文字列を置換後文字列を整理して、コピー貼り付けで実行してください。

// 選択行複数ワードで現在行以降を繰り返し一括置換

var WshShell = new ActiveXObject("WScript.Shell");
var rtn=0;

//メイン処理実行
rtn = main();

//メイン処理
function main(){

  var selLineStr="",replaceStr="",replaceSplitStr="",replaceBefStr="",replaceAftStr="";
  var n=0,ax=0,ay=0,cx=0,cy=0,scx=0,scy=0,selLineCnt=0;

  try {
    ax = Editor.GetSelectColmFrom(); // 選択開始列の取得
    ay = Editor.GetSelectLineFrom(); // 選択開始行の取得
    //WshShell.Popup("選択開始:"+ax+","+ay ,0,"デバッグ",0);

    cx = Editor.ExpandParameter( '$x' ); // 現在位置列の取得
    cy = Editor.ExpandParameter( '$y' ); // 現在位置行の取得
    //WshShell.Popup("現在位置:"+cx+","+cy ,0,"デバッグ",0);

    // 選択範囲行数を算出
    selLineCnt = cy - ay;
    //WshShell.Popup("選択範囲行数:"+selLineCnt ,0,"デバッグ",0);

    // 行選択してるかチェック
    selLineStr = Editor.GetSelectedString(0); // 選択文字列を取得する
    //WshShell.Popup("["+selLineStr+"]" ,0,"デバッグ",0);
    if (selLineStr == "") {
      WshShell.Popup("行を選択してください。" ,0,"エラー",0);
      return 1;
    }

    //WshShell.Popup("選択開始行:"+ay+'行' ,0,"デバッグ",0);
    //WshShell.Popup("現在位置行:"+cy+'行' ,0,"デバッグ",0);

    // ----------一括置換処理----------
    for (var n=ay; n<=cy-1; ++n) {
      //WshShell.Popup(n+"行目" ,0,"デバッグ",0);
      Editor.Jump(n,0); // 選択n行まで飛ぶ

      // 文字列空チェック
      Editor.GoLineEnd_Sel(0); // (選択)行末に移動(折り返し単位)
      replaceStr = Editor.GetSelectedString(0);
      // 対象行に文字列が存在しない場合はは次の行へ
      if (replaceStr == "") {
        //WshShell.Popup("(空行)" ,0,"エラー",0);
        continue;
      }
      // セパレータ(タブ)存在チェック
      if (replaceStr.indexOf("\t") == -1) {
        //WshShell.Popup("(タブ存在なし)" ,0,"エラー",0);
        continue;
      }
      Editor.CancelMode(0); // 各種モードの取り消し
      Editor.Jump(n,0); // 選択n行まで飛ぶ

      replaceSplitStr = replaceStr.split("\t");
      // 置換前文字列取得
      replaceBefStr = replaceSplitStr[0];
      //WshShell.Popup("置換前:"+replaceBefStr ,0,"デバッグ",0);
      // 置換前文字列取得
      replaceAftStr = replaceSplitStr[1];
      //WshShell.Popup("置換後:"+replaceAftStr ,0,"デバッグ",0);

      // 置換対象行を選択して置換処理実行
      Editor.Jump(cy,0); // 置換開始行(=選択最終行)まで飛ぶ
      Editor.GoFileEnd_Sel(0); // (選択)ファイルの最後に移動
      Editor.ReplaceAll(replaceBefStr, replaceAftStr, 144); // 選択範囲をすべて置換
    }
    Editor.CancelMode(); // 各種モードの取り消し

    return 0;

  } catch (error) {
    WshShell.Popup(error ,0,"エラー",0);
    Editor.CancelMode(); // 各種モードの取り消し
  }

}

最後に

複数ファイルの文字列を複数ワードで一括置換するツールはある気がしますが、1ファイル内のみを複数ワードで一括で手軽に置換するツールはない気がするので作ってみました。

自分の使い方に合った形でカスタマイズしてみてください。

サクラエディタは超有効ツールなので、マクロに登録してぜひ使ってみてください。


コメント

//▼2023/04/08追加 //https://lovagelab.com/posts/3406/ //▲2023/04/08追加