秀丸エディタで「行頭/行末に一括付与」:プレフィックス/サフィックス(ログ加工で強い)

ログや一覧テキストを加工していると、こういう作業が頻発する。

  • 行頭に 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分)

  1. 秀丸で新規ファイルを開く
  2. 上のマクロを貼り付ける
  3. line_wrap_prefix_suffix.mac で保存
  4. マクロ → マクロ登録 で登録
  5. 必要ならキー割り当て

使い方(実例)

例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整形・一覧の形合わせで出番が多い。
選択して一発で処理できるようにしておくと、地味に作業速度が上がる。

タイトルとURLをコピーしました