ホストシステムからダウンロードしたデータや、レガシーなシステム間でやり取りされる「固定長テキストデータ」。
「1行が〇〇バイトって決まっているのに、ファイル全体が一切改行されずに1行に繋がっていて、中身が確認できない!」と困ったことはありませんか?
今回は、そんな「改行のないフラットなファイル」に、指定した桁数(バイト数)ごとに自動で改行を入れて別名で保存する方法をまとめました。
Windows(GUI・CUI)、Excel VBA、Linuxのそれぞれの環境に応じた決定版の手順をご紹介します!
1. 【Windows: GUI版】サクラエディタの神機能を使う
Windowsでパパッと手動で処理したいなら、定番の無料テキストエディタ「サクラエディタ」を使うのが一番簡単です。実は「折り返し位置に改行を入れてコピーする」という超便利な機能が標準で備わっています。
➔ 作業手順
-
サクラエディタで対象のファイルを開きます。
-
メニューの [設定] ➔ [タイプ別設定] を開きます。
-
スクリーンタブにある「折り返し方法」を [指定桁で折り返す] に変更し、「折り返し桁数」に改行を入れたい任意のバイト数(例: 128)を入力して [OK] を押します。
-
画面上で指定桁数ごとに折り返されたら、
Ctrl + Aでファイル全体を選択します(※選択した範囲しか改行コピーされないため、必ず全選択してください)。 -
メニューの [編集] ➔ [折り返し位置に改行をつけてコピー] を選択します。
-
新規ファイルを開いて貼り付け(
Ctrl + V)し、別名で保存すれば完了です!
2. 【Windows: CUI版】PowerShellやコマンドで自動化する
大量のファイルがあったり、毎回サクラエディタを開くのが面倒な場合は、プログラムで自動化しましょう。
💡 PowerShellでサクッと実行する場合
PowerShellを使えば、128バイトごとに改行を入れる処理をコマンド数行で実行できます。
PowerShell
# 128バイトごとに分割して改行を入れ、別名で保存する例
$bytes = [System.IO.File]::ReadAllBytes("C:\path\to\input.dat")
$stream = [System.IO.File]::Create("C:\path\to\output.txt")
for ($i = 0; $i -lt $bytes.Length; $i += 128) {
$length = [Math]::Min(128, $bytes.Length - $i)
$stream.Write($bytes, $i, $length)
$stream.WriteByte(13) # CR
$stream.WriteByte(10) # LF
}
$stream.Close()
🔗 参考になる外部リンク
バッチファイルやExcel VBAでゴリゴリ処理したい方は、以下の老舗サイトや知恵袋の解説が非常に参考になります。
-
バッチで解決したい場合: .datのファイルを128byteづつに編集(改行)する.batファイルを作りたい(Yahoo!知恵袋)
-
Excel VBAでシステム化したい場合: VBA応用(固定長形式テキストデータの読み込み)(き leader’s 備忘録 / asahi-net)
3. 【Linux版】最強の「fold」コマンド一発で解決
Linux環境(あるいはMacやGit Bashなど)であれば、ツールを探す必要すらありません。標準で用意されている fold コマンド を使えば、一瞬で処理が完了します。
➔ コマンド例
改行のない a.txt を「100バイトごと」に改行して、a_after.txt という別名ファイルで出力したい場合は、以下のコマンドを叩くだけです。
Bash
fold -w 100 a.txt > a_after.txt
-
-w 100:画面の幅(width)を100バイトに指定して折り返すオプションです。 -
>:リダイレクトを使って、折り返した結果を別名ファイルに保存しています。
短くてシンプル、かつ超高速に処理できるので、Linux環境があるならこれが最もスマートな方法です。
まとめ
改行のない固定長データはそのままでは視認性が最悪ですが、環境に合わせて適切な方法を選べば、数秒で綺麗に整形することができます。
-
画面で見ながら手動でやりたい ➔ サクラエディタの「折り返し改行コピー」
-
Windowsで自動化したい ➔ PowerShellやVBA・バッチの活用
-
Linux環境がある ➔
foldコマンド一発
ご自身の作業環境に合わせて、一番ラクな方法を試してみてくださいね!
