固定長バイナリレコードをフィールドごとに分割して区切りテキスト形式で出力するツール。フィールドのバイト列はそのまま保持します。
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19ad080828aa4ba889be49ecc343667df8fb08e7ac52d8b22c75a06cf03858ba
|
|
| MD5 |
e48b51ebb2b781d57cf30562f49dc47b
|
|
| BLAKE2b-256 |
99941bdfef3ce6ccb1a95492977edaf606bfea1eaa6db64855846a79e7029018
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9cce08aa2afc54f9b77c11751663086ab34fd457274a846d200eca2c4c26e9f
|
|
| MD5 |
8c3648e1352f4df1181826bdac232427
|
|
| BLAKE2b-256 |
cf798cc12cce9895ee2fd53f3ca2954917dc8db166b6a8f2ee358003224d61c6
|