Skip to main content

固定長バイナリレコードをフィールドごとに分割して区切りテキスト形式で出力するツール。フィールドのバイト列はそのまま保持します。

Project description

fixedrec - 固定長バイナリレコードをフィールドごとに分割して区切りテキスト形式で出力するツール

固定長バイナリレコードをフィールドごとに分割して区切りテキスト形式で出力するツール。 C 言語風の struct 設定ファイルでレイアウトを定義し、フィールドはバイナリのまま出力(区切りや行末だけを整形)します。 (バイナリではなく 16 進数出力も可能)

✨ 特徴

  • バイト列を一切変換せず、そのまま出力(デコードしない)
  • 入力終端は CRLF / LF / CR / なし / 任意バイト列 を指定可能(--in-term
  • 出力行末は CRLF / LF / CR / なし / 任意バイト列 を指定可能(--out-term
  • フィールド区切りは 任意(デフォルト TAB、--sep で変更)
  • 複数 struct の定義/拡張子マッピング/* ... */ ブロックコメント対応
  • 可視化用の エスケープ--escape hex --prefix % など)に対応
  • 巨大ファイル OK(ストリーム処理

📖 目次


使い方(クイック)

# BMPファイルのヘッダ出力(16進数の場合)
fixedrec -i input.bmp -o out.tsv -c layout.struct --struct BMP_HEADER --in-term none --sep "\t" --escape hex --max-rows 1 --header-structs

# BMPファイルのヘッダ出力(生バイトの場合)
fixedrec -i input.bmp -o out2.tsv -c layout.struct --struct BMP_HEADER --in-term none --sep "\t" --max-rows 1
  • デフォルト: 入力終端=CRLF、出力行末=CRLF、区切り=TAB
  • フィールドは生バイトで出力(文字エンコード変換なし)

設定ファイルの書き方

layout.struct(UTF-8 推奨。///* ... */ コメント可)

/* 例: 閉じカッコ後に拡張子を列挙してマッピング */
struct FIX47 {
  BYTE Title[10];
  BYTE COL_A[15];
  BYTE COL_B[20];
} txt, dat, csv;   // .txt / .dat / .csv に適用(ドット有無どちらでもOK)

struct FIX32 {
  BYTE Foo[8];
  BYTE Bar[8];
  BYTE Baz[16];
} bin;             // .bin に適用

struct BMP_HEADER {
  BYTE Signature[2];        // "BM" 固定 (0x42 0x4D)
  BYTE FileSize[4];         // ファイル全体のサイズ (リトルエンディアン)
  BYTE Reserved1[2];        // 予約領域1 (通常 0)
  BYTE Reserved2[2];        // 予約領域2 (通常 0)
  BYTE PixelOffset[4];      // 画像データ先頭までのオフセット (例: 54)
} bmp;
  • 構造体名は必須(複数定義する場合、無名は不可推奨)
  • フィールドは BYTE Name[Len]; のみ(Len は > 0)
  • } txt, dat; のように拡張子をカンマ区切りで列挙(小文字で照合)

主なオプション

-i,  --input PATH        入力バイナリ(固定長 + 入力終端 の繰返し)
-o,  --output PATH       出力テキスト(バイナリ書込)
-c,  --config PATH       struct定義ファイル(UTF-8/UTF-8(BOM)/CP932 対応)
     --struct NAME       使用するstruct名(未指定時は拡張子で自動選択)

     --in-term  VAL      入力終端: crlf|lf|cr|none|hex:0a|"\\x1e\\x1f" など(既定: crlf)
     --out-term VAL      出力行末: 同上(既定: crlf)
     --sep      VAL      フィールド区切り: "," / "\\t" / " | " / hex:1f 等(既定: "\\t")

     --escape none|hex   可視化エスケープ(既定: none=生バイト)
     --prefix STR        --escape hex時の接頭辞(既定: "\\x", 例: "%", "\\u", "$")

     --max-rows N        先頭Nレコードのみ処理(0=全件)
     --lenient           入力終端の不一致/欠落時も警告して継続(既定は厳格エラー)
     --dump-layout       レイアウトと推定レコード数を表示して終了
  --header-structs    設定ファイルに定義された struct 名を出力ファイル先頭にヘッダ行として出力
     --summary           サマリのみ表示

メモ

  • hex:... は偶数桁の 16 進(例: hex:0d0a
  • "\t", "\\x1f" のような バックスラッシュエスケープも使用可

使用例

1) 基本(CRLF 終端 →TSV)

fixedrec -i data.dat -o out.tsv -c layout.struct

2) 入力が LF 終端、出力も LF に

fixedrec -i data.lf -o out_lf.tsv -c layout.struct \
  --in-term lf --out-term lf

3) 入力が「終端なし(生固定長)」、出力は CRLF

fixedrec -i data.raw -o out.tsv -c layout.struct \
  --in-term none --out-term crlf

4) 区切りを US(0x1F)、非 ASCII を %NN で可視化

fixedrec -i data.bin -o out.txt -c layout.struct \
  --sep hex:1f --escape hex --prefix %

5) 複数 struct がある設定で、拡張子から自動選択

fixedrec -i sample.txt -o out.tsv -c layout.struct
# -> .txt にマッピングされた struct を自動選択

6) 明示的に struct 指定

fixedrec -i some.bin -o out.tsv -c layout.struct --struct FIX47

7) レイアウト確認(レコード長/推定件数)

fixedrec -i data.dat -c layout.struct --dump-layout

動作仕様

  • 入力 1 レコード = 合計バイト長BYTE フィールドの総和) + 入力終端--in-term) ※ファイルサイズがレコード長の倍数でない場合は警告します。

  • 出力 各フィールドは バイナリのまま出力(文字コードに一切触れません)。 フィールドは --sep で結合し、行末に --out-term を付与します。

  • エスケープ

  • エスケープ --escape hex のとき、すべてのバイト--prefix と 2 桁の 16 進で表記します(例:%41%42%0a\x41\x42\x0a)。

  • メモリ/性能 レコード単位のストリーム処理です。数 GB 級でも動作(I/O 帯域依存)。

  • 終了コード

    • 0 正常終了
    • 1 入力が空など軽度エラー
    • 2 設定/引数/整合性エラー、I/O 例外 など

トラブルシュート

  • 「構造体が見つからない」

    • --struct を指定するか、設定の } txt, dat; など拡張子マッピングを確認。
  • 「hex 指定エラー」

    • hex: の後は 偶数桁の 16 進のみ。例:hex:1f(OK)、hex:1(NG)
  • 「出力が文字化けに見える」

    • 本ツールは変換しません。可視化したい場合は --escape hex を使うか、 後段で適切なエンコード(UTF-8 等)として解釈できるツールで確認してください。
  • 「末尾不完全/終端不一致」

    • 既定はエラー停止。継続したい場合は --lenient を付けると警告して出力を続けます (出力行末は常に --out-term で正規化)。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bin_fixedrec-1.0.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bin_fixedrec-1.0.1-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file bin_fixedrec-1.0.1.tar.gz.

File metadata

  • Download URL: bin_fixedrec-1.0.1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.10

File hashes

Hashes for bin_fixedrec-1.0.1.tar.gz
Algorithm Hash digest
SHA256 19ad080828aa4ba889be49ecc343667df8fb08e7ac52d8b22c75a06cf03858ba
MD5 e48b51ebb2b781d57cf30562f49dc47b
BLAKE2b-256 99941bdfef3ce6ccb1a95492977edaf606bfea1eaa6db64855846a79e7029018

See more details on using hashes here.

File details

Details for the file bin_fixedrec-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: bin_fixedrec-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.10

File hashes

Hashes for bin_fixedrec-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b9cce08aa2afc54f9b77c11751663086ab34fd457274a846d200eca2c4c26e9f
MD5 8c3648e1352f4df1181826bdac232427
BLAKE2b-256 cf798cc12cce9895ee2fd53f3ca2954917dc8db166b6a8f2ee358003224d61c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page