ログや一覧テキストを加工していると、こういう作業が頻発する。
- 行頭に
INFO:や-を付けたい - 行末に
,や;や\を付けたい - 行に引用符を付けて
"foo"にしたい - SQLのIN句用に
'abc',みたいな形に整えたい - URL一覧の前に固定のパスを付けたい
この手の加工は、秀丸マクロで「選択範囲(無ければ全文)」に一発でかけるのが速い。
できること
- 行頭にプレフィックスを付ける
- 行末にサフィックスを付ける
- 空行を除外する/含める を切り替え
- 既に付いている場合は二重付与を避ける(任意)
マクロ本体(コピペで使える)
ファイル名:line_wrap_prefix_suffix.mac
/*
line_wrap_prefix_suffix.mac
行頭プレフィックス/行末サフィックスを一括付与する(行単位)。
仕様:
- 選択があれば選択範囲、無ければ全文
- 空行を対象にする/しないを選べる
- 二重付与を避ける(プレフィックス一致/サフィックス一致)
*/
#scope = val(input("対象: 1=選択(無ければ全文) / 2=全文", "1"));
if (#scope == 2 || !selecting) {
selectall;
}
$pre = input("行頭に付ける文字(プレフィックス)", "");
$suf = input("行末に付ける文字(サフィックス)", "");
#skipBlank = val(input("空行はスキップ: 0=しない / 1=する", "1"));
#avoidDup = val(input("二重付与を避ける: 0=しない / 1=する", "1"));
$CR = char(13);
$LF = char(10);
// 選択文字列を取得
#sx = seltopx;
#sy = seltopy;
$s = gettext(#sx, #sy, selendx, selendy, 1);
// 改行をLFに寄せて処理
$s2 = strreplace($s, $CR + $LF, $LF);
$s2 = strreplace($s2, $CR, $LF);
#slen = strlen($s2);
#start = 0;
$out = "";
while (1) {
#p = strstr($s2, $LF, #start);
if (#p < 0) {
$line = midstr($s2, #start + 1, #slen - #start);
#last = 1;
} else {
$line = midstr($s2, #start + 1, #p - #start);
#last = 0;
}
// 空行スキップ
if (#skipBlank == 1 && $line == "") {
$newline = $line;
} else {
$newline = $line;
// プレフィックス
if ($pre != "") {
if (#avoidDup == 1) {
// 行頭が既に$preで始まるなら付けない
if (leftstr($newline, strlen($pre)) != $pre) {
$newline = $pre + $newline;
}
} else {
$newline = $pre + $newline;
}
}
// サフィックス
if ($suf != "") {
if (#avoidDup == 1) {
// 行末が既に$sufで終わるなら付けない
#llen = strlen($newline);
if (#llen < strlen($suf)) {
$newline = $newline + $suf;
} else {
if (midstr($newline, #llen - strlen($suf) + 1, strlen($suf)) != $suf) {
$newline = $newline + $suf;
}
}
} else {
$newline = $newline + $suf;
}
}
}
$out = $out + $newline;
if (#last) break;
$out = $out + $CR + $LF;
#start = #p + 1;
}
// 置換
delete;
moveto #sx, #sy;
insert $out;
message "行頭/行末 付与 完了";
導入手順(3分)
- 秀丸で新規ファイルを開く
- 上のマクロを貼り付ける
line_wrap_prefix_suffix.macで保存- マクロ → マクロ登録 で登録
- 必要ならキー割り当て
使い方(実例)
例1:ログっぽくする(行頭に INFO:)
- プレフィックス:
INFO: - サフィックス:空欄
- 空行スキップ:1
入力
start
load config
done
出力
INFO: start
INFO: load config
INFO: done
例2:SQLのIN句用に '...' , を作る
- プレフィックス:
' - サフィックス:
',
入力
abc
def
ghi
出力
'abc',
'def',
'ghi',
最後のカンマを消したいなら、最後の行だけ手で直すか、別マクロで調整する。
例3:バックスラッシュ継続(行末に \)
- サフィックス:
\
入力
foo
bar
baz
出力
foo \
bar \
baz \
例4:URLに固定の前段を付ける
- プレフィックス:
https://example.com/
入力
a.html
b.html
c.html
出力
https://example.com/a.html

Example Domain

Example Domain
よくあるハマりどころ
- 既に付いてる行にもう一回付けると、二重になる
→ 「二重付与を避ける」をONにしておくと事故が減る - 空行にまで付けると見づらい
→ 空行スキップONが無難 - プレフィックス/サフィックスに
"や\を入れる時は、入力ミスに注意
まとめ
行頭/行末の一括付与は、ログ加工・SQL整形・一覧の形合わせで出番が多い。
選択して一発で処理できるようにしておくと、地味に作業速度が上がる。
