RDW Viewer
日本語 | 中文

RDW(Record Descriptor Word) 付きの可変長レコードファイルを VS Code で表示する拡張機能です。
1 レコードを 1 行とし、COBOL の COPY句に従って項目を横に並べて表示します。
ファイル形式
[前 RDW 4 バイト][レコード本体 N バイト][後 RDW 4 バイト]
- RDW はリトルエンディアン。先頭 2 バイトがレコード本体の長さ N、後半 2 バイトは使用しません(画面には表示しません)。
- 前後の RDW が一致することでレコード境界を判定します。
- レコード本体は既定で Shift_JIS としてデコードします。画面右上、または設定
rdwViewer.encoding で変更できます。
サンプル
examples/ に、すぐに試せる RDW ファイルと COPY句があります。examples フォルダーを VS Code で開き(設定 .vscode/rdw-viewer.json が自動で使われます)、各 .dat を右クリック →「RDW Viewer で開く」。
| ファイル |
内容 |
01-customer.dat |
通常のレコード:日本語・半角カナ・COMP-3・ゾーン 10 進。固定形式の COPY句(一連番号・識別領域付き) |
02-mixed-length.dat |
レコード長が混在:ヘッダー 40 / 明細 80 / トレーラー 30 バイト |
03-same-length.dat |
同じレコード長(64)をレコード区分(1 バイト目)で COPY句を切り替え |
04-redefines.dat |
REDEFINES:支払区分ごとにカード / 銀行 / 現金のレイアウトを切り替え |
05-numeric.dat |
各種 USAGE(ゾーン 10 進、SIGN SEPARATE、COMP-3、COMP、COMP-5、COMP-1/2)と不正データの例 |
06-broken.dat |
RDW エラー:前後不一致・長さ不正・ファイルの途中切れ |
07-no-copybook.dat |
COPY句なし:COMP-3 の自動判別 |
サンプルは npm run examples で再生成できます(test/fixtures/examples.ts)。
使い方
エクスプローラーでファイルを右クリック →「RDW Viewer で開く」(.dat / .rdw のカスタムエディターとしても登録されており、「アプリケーションから開く…」で既定のエディターに設定できます)。大きなローカルファイルはファイル全体をメモリに読み込まずページ単位で必要な部分だけを読み込み、進行状況の表示と途中中止に対応しています。
- レコード長ごとのタブ:長さの異なるレコードが混在する場合、長さごとにタブを分け、それぞれに COPY句を指定できます。
- COPY句の指定:タブ上部の「COPY句を選択…」から選びます。指定がないレコード長は、ワークスペース内で全長が一致する COPY句が 1 つだけなら自動で使います(タブに「自動」と表示。保存はされず、「指定解除」で自動選択も止められます)。全長がレコード長と一致する COPY句は ✓ 付きで先頭に表示されます。指定内容は
<ワークスペース>/.vscode/rdw-viewer.json に保存され、次回から自動で適用されます。
- ファイル順:右上の「ファイル順」で、ファイル上の順序のまま全レコードを表示します。COPY句が切り替わる箇所には見出し(項目名 / 属性 / 相対位置)が挿入されます。
- セルの詳細:セルをクリックすると、表の下のステータス行にレコード番号・オフセット・項目値・元のバイト(16 進)を、その下にレコード全体の 16 進ダンプを表示します。
- 画面の操作:タブ上部の行には主な操作(COPY句の選択・変更、エクスポート)だけを置き、解析詳細・指定解除・項目値で切り替えは「⋯」メニューにまとめています。オフセット列はツールバーの「オフセット」で表示できます。
- エラー:レコード長の超過、ファイルの途中切れ、前後 RDW の不一致は「エラー」タブとファイル順ビューに赤で表示し、オフセットと原因を示します。後続の正しいレコード境界を探して解析を続けます。
- 表示言語:日本語が既定です。VS Code の表示言語が中国語のときは中国語で表示します。
- 見やすさ:縞模様、選択行の強調、型による色分け(数値・FILLER・空白)、末尾の埋め空白は「·」「□」で表示。ファイル順ビューでは COPY句ごとに色帯で区別します。色は VS Code のテーマに追従します。
- セルの数値:数値項目のセルをクリックすると、デコードした数値(例:
PIC S9(5)V99 の 009876u → -987.65)も表示します。
エクスポート(CSV / TSV)
- 各タブ上部の「エクスポート…」:現在のタブを 1 ファイルに出力します。
- ツールバーの「すべてエクスポート…」:フォルダーを選び、タブごとに 1 ファイル(
<ファイル名>_<レコード長>.csv など)を出力します。エラーがあればエラー一覧も出力します。
- 形式はエクスポート時に CSV / TSV から選択します。1 行目に項目名、2・3 行目に属性と相対位置、各行の先頭にレコード番号とオフセットを出力します。
- 文字コードは既定で Shift_JIS(設定
rdwViewer.exportEncoding で BOM 付き UTF-8 に変更可)。Shift_JIS で表せない文字は ? に置き換え、件数を通知します。
- COMP-3 などはデコードした値を出力します。COPY句がない場合に自動判別した COMP-3 は
[値]、判別できないバイトは <16 進> で出力します。
- 大きなファイルも分割して書き込むため、メモリを大量に使いません。進行状況が表示され、途中で中止できます(中止したファイルは削除されます)。
- ファイル順ビューは列構成がグループごとに異なるため、1 つの表としてはエクスポートできません。
16 進ダンプ
ツールバーの「HEX」がオンのとき、表のレコードをクリックすると、表の下にそのレコードの 16 進ダンプ(オフセット / 16 バイトの 16 進 / 文字)を表示します。
- 項目ごとに背景色を交互に変え、選択中の項目を強調します。バイトにマウスを合わせると位置(1 から数えた位置と 16 進オフセット)と項目名を表示し、クリックすると表の対応するセルを選択します。
- 前後の RDW も表示します。エラー行をクリックすると、読み飛ばしたバイト(先頭 4096 バイトまで)を表示します。
- 2 バイト文字は先頭バイトの位置に表示します。表との境界をドラッグすると高さを変えられます。
2 つのファイルの比較
エクスプローラーで 2 つのファイルを選択して右クリック →「RDW Viewer で比較」。1 つだけ選んだ場合や、ビューアーのツールバーの「比較…」からは、比較先のファイルを選択します。
- 左右に並べて表示:A と B の表を左右に並べ、縦・横のスクロールを同期します。違いのある項目は黄色、A のみのレコードは赤、B のみのレコードは緑で表示し、相手側には斜線の空行を入れます。
- 突き合わせ:
- レコード番号順:A の n 件目と B の n 件目を比較します(RDW エラーは比較対象外)。
- キー項目:A の COPY句の項目から選ぶ(複数可。連結して比較)か、位置を
1-10、1-3,8-10 の形式で入力します。挿入・削除・順序の入れ替えがあっても対応するレコード同士を比較します。同じキーが複数ある場合は出現順に対応付けます。
- 差分のみで相違・片側のみのレコードだけを表示します。「前の差分」「次の差分」(Shift+F7 / F7)で移動できます。
- セルをクリックすると A / B の値と 16 進を並べて表示し、16 進ダンプも左右に並べて異なるバイトを強調します。
- COPY句は通常の表示でレコード長ごとに指定したもの(
.vscode/rdw-viewer.json)を使います。レイアウトが異なる場合は項目名で対応付けて比較します。
- 大きなファイル(A・B 合計 20 万件以上)では進行状況を表示し、途中で中止できます。中止した場合は直前の比較結果のままです。
同じレコード長で、項目値によって COPY句を切り替える
レコード長は同じでもレイアウトが異なる場合(ヘッダー・明細・トレーラーなど)、ある項目の値で区別できます。
- 対象のレコード長のタブで「項目値で切り替え…」をクリックします。
- 判別に使う項目を選びます。現在の COPY句の項目(例:
レコードID)から選ぶか、開始位置・長さ・型(文字 / COMP-3)を手入力します。COMP-3 項目は数値として比較します。
- その項目に現れる値と件数が一覧表示されます。確認すると値ごとにタブが作られます(例:「1600 バイト = +10200」)。
- タブごとに COPY句を選択します。対応する COPY句がない値は別グループとなり、レコード全体を表示します。
値が 50 種類を超える場合は「項目の選択が誤っている可能性がある」として中止します。「切り替えを解除」でレコード長単位の表示に戻せます。
設定は .vscode/rdw-viewer.json の discriminators に保存されます。
{
"copybooks": { "2000": "copy/HEADER.cbl" },
"discriminators": {
"1600": {
"start": 1, "length": 3, "type": "comp3",
"copybooks": { "+10100": "copy/HEADER.cbl", "+10200": "copy/DETAIL.cbl" }
}
}
}
REDEFINES:レイアウトの切り替え
REDEFINES の元の項目と再定義した項目は同じ領域を共有し、領域の長さはいちばん長いものになります(重複して数えません)。
既定では元の項目のレイアウトで表示し、提示行の下の「レイアウト」で切り替えます(例:REDEFINES PAY-CARD → PAY-BANK)。
- 選択はタブ(レコード長、または項目値のグループ)ごとに
.vscode/rdw-viewer.json の layouts に保存されます。
- 「項目値で切り替え」と組み合わせると、たとえば支払区分
B のレコードは自動的に銀行レイアウトで表示できます(examples/04-redefines.dat を参照)。
- 入れ子の REDEFINES、OCCURS 内の REDEFINES、REDEFINES の REDEFINES にも対応します。同じ長さの
01 が複数ある場合も、ここで切り替えられます。
COPY句がない場合:COMP-3 の自動判別
COPY句が未指定のレコードは「レコード全体」の 1 列で表示します。ツールバーの「COMP-3 を自動判別」がオンのとき(既定でオン、設定 rdwViewer.autoDetectPacked)、
レコードを文字・COMP-3・判別できないバイトに分けて表示します。
[+10100]1ABCD-0001[+0][+0][+2241070][+2241086]
[ ](緑):推定した COMP-3 の値。符号 C/D は +/- 付き、F は符号なし。小数点の位置は分からないため整数で表示します。
‹ ›(灰色):文字でも COMP-3 でもないバイト。16 進で表示します。
- 末尾の空白は表示しません。セルをクリックすると全内容と元のバイトを確認できます。
推定のため誤判定の可能性があります。 たとえば文字の直後に 0x20(空白)で始まる COMP-3 が続く場合、その空白は文字の末尾として扱われます。
正確に表示するには COPY句を指定してください(指定後は自動判別しません)。
レコード長と COPY句の長さが一致しない場合
| 状況 |
lenient(既定) |
strict |
| レコードが COPY句より長い |
超過分を「(余り)」列にオレンジで表示 |
分割せずレコード全体を表示 |
| レコードが COPY句より短い |
途中で切れた項目はオレンジ、存在しない項目は — |
同上 |
PIC 9 項目に数字以外がある、Shift_JIS としてデコードできない |
そのまま表示してオレンジ |
— |
設定 rdwViewer.lengthMismatch で切り替えます。長さが合わないときは「⋯」メニューの「解析詳細」で各項目の位置・長さ・解析メモを一覧表示し、COPY句と見比べることができます。
COPY句の対応範囲
- 固定形式 / 自由形式(行ごとに判定。1〜6 桁目の一連番号、73〜80 桁目の識別領域は自動で除去。桁位置はバイト単位で数えるため、日本語の項目名があってもずれません)
- レベル番号(77、66・88 は読み飛ばし)、
FILLER、PIC X/A/9/S/V/P/Z…、編集項目、PIC N / PIC G(1 文字 2 バイト)
- 集団項目の
USAGE / SIGN は下位項目に引き継ぎ
SIGN [LEADING|TRAILING] [SEPARATE]
OCCURS n(入れ子は name(1,2) のように展開)
REDEFINES(上記のとおり切り替え可能)
01 が複数ある場合は、全長がレコード長と一致するものを自動で使用
COMPUTATIONAL-3 などの正式名称、PIC のない COMP-1 / COMP-2 / INDEX
未対応(メモを表示します):OCCURS DEPENDING ON(最大回数で展開)、SYNC による境界合わせ(スラックバイトは考慮しません)。
数値の形式
数値項目はデコードして右寄せで表示します。不正なデータを正常値のように見せないことを重視し、
内容が不正なものは 16 進で、デコードはできても疑わしいもの(桁あふれなど)は値をオレンジで表示します。
| USAGE |
表示 |
不正(16 進・オレンジ) |
疑わしい(値・オレンジ) |
COMP-3 / PACKED-DECIMAL |
V の位置に小数点。符号 C/A/E/F は正、D/B は負 |
数字部が 0〜9 以外、符号部が不正 |
PIC の桁数を超える(偶数桁の先頭の半バイトが 0 でない)、符号なし項目に負号 |
COMP / COMP-4 / BINARY |
2 進整数。バイト順は rdwViewer.binaryEndian |
— |
値が PIC の桁数を超える(TRUNC(STD) では起こらない) |
COMP-5 |
2 進整数(ネイティブ)。バイト順は rdwViewer.comp5Endian |
— |
—(2 進の全範囲を使えるため) |
COMP-1 / COMP-2 |
浮動小数点。rdwViewer.floatFormat で IEEE 754 / IBM 16 進浮動小数点 |
NaN・無限大、長さ不正 |
— |
DISPLAY(ゾーン 10 進) |
画面は元の文字のまま。セルをクリックすると数値を表示 |
空白・小数点など数字以外、符号の位置・文字が不正 |
— |
ゾーン 10 進の符号:SIGN SEPARATE は + / -。符号が数字に含まれる場合は富士通 NetCOBOL の内部表現に従い、符号を持つ桁の上位 4 ビットが 4(@A〜I)なら正、5(P〜Y)なら負です(例:+6789 = 36 37 38 49、-6789 = 36 37 38 59)。他のコンパイラーの形式(p〜y、EBCDIC から変換した {A〜I / }J〜R)は不正として扱います。
プラットフォームごとの目安:
| 作成環境 |
binaryEndian |
comp5Endian |
floatFormat |
| メインフレーム(IBM など、EBCDIC から変換) |
big |
big |
ibm |
| Windows / Linux(x86)の NetCOBOL(既定値) |
big |
little |
ieee |
設定
| 設定 |
既定値 |
説明 |
rdwViewer.encoding |
shift_jis |
既定の文字コード |
rdwViewer.lengthMismatch |
lenient |
長さ不一致時の扱い |
rdwViewer.binaryEndian |
big |
COMP / COMP-4 / BINARY 項目のバイト順(COMP-3 には影響しません) |
rdwViewer.comp5Endian |
little |
COMP-5 と COMP-1 / COMP-2 のバイト順(big / little / binaryEndian と同じ) |
rdwViewer.floatFormat |
ieee |
COMP-1 / COMP-2 の形式(ieee / ibm) |
rdwViewer.autoDetectPacked |
true |
COPY句がない場合に COMP-3 を自動判別 |
rdwViewer.exportEncoding |
shift_jis |
エクスポートの文字コード(shift_jis / utf-8-bom) |
rdwViewer.hiddenFieldPattern |
^FILLER$ |
「FILLER を非表示」で隠す項目名の正規表現(例:FILLER\|COMMA) |
開発
npm install # 初回のみ:TypeScript などの開発用依存関係をインストール
npm test # コンパイルして単体テストを実行
npm run compile # コンパイルのみ
vsix の作成(自動でコンパイルされます):
npx vsce package
ライセンス
MIT