やりたいこと
- テキストファイルの各行に、行番号を挿入したい
前提条件
- Windows環境とする
- なるべく単純な方法で実現したい
- テキストファイルは大量にあり、なるべく短時間で処理したい
方法①:Windowsコマンドを使用する方法
findstr
コマンドの\n
オプションが、行番号を追加する機能であることを利用したもの
これにfor
コマンドを組合わせることで、大量のテキストファイルを処理する
Windowsコマンド
同じファイルに上書き保存する方法が分からなかったので、元のファイル名に「_」を付けたファイルに出力しています。
元のファイル名 :C:\work\files\filename.txt
出力されるファイル名:C:\work\files\_filename.txt
for /r %i in (*.*) do (findstr /n /r .* %~fi > %~pi_%~ni%~xi)
-
for
コマンド-
/r
オプション:サブディレクトリを再帰処理する
-
-
findstr
コマンド-
/n
オプション:行番号を追加する- ※参考:
find
コマンドにも同様のオプションがある
- ※参考:
-
/r
オプション:正規表現を使用する - その他(オプション構文)
- %~fi:フルパスを意味する
- %~ni:ファイル名を意味する
- %~xi:拡張子を意味する
-
- 補足
- 本コマンドをバッチファイルとして実行する場合、変数名の
%
を1つ増やして、%%i
にする必要があります
方法②:サクラエディタとWindowsコマンドを組合わせたもの
サクラエディタの機能「選択範囲内全行行番号付きコピー Ctrl+:」を利用したもの
これにWindowsコマンドを組合わせることで、大量のテキストファイルを処理する
サクラエディタのマクロ
1つのテキストファイルに、行番号を入れるマクロです。
キーマクロの記録で生成したコードを一部修正して作成しました。
引数(0)
が多いですが、決まり文句みたいなものらしいです。
//ファイル名:addLineNum.mac
S_SelectAll(0); // すべて選択
S_CopyLinesWithLineNumber(0); // 選択範囲内全行行番号付きコピー
S_Paste(0); // 貼り付け
S_ReDraw(0); // 再描画
FileSave(); // 上書き保存
WinClose(); // 閉じる
Windowsコマンド
サクラエディタのマクロを、大量のファイルに再帰的に実行するためのものです。
各パスは実行環境に合わせて修正が必要です。
cd C:\work\files
for /r %%i in (*.*) do (call :method %%i)
exit
:method
"C:\Program Files (x86)\sakura\sakura.exe" %1 -M=C:\work\addLineNum.mac
goto :eof