サクラエディタで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ファイル内のみを複数ワードで一括で手軽に置換するツールはない気がするので作ってみました。
自分の使い方に合った形でカスタマイズしてみてください。
サクラエディタは超有効ツールなので、マクロに登録してぜひ使ってみてください。
コメント