1. 導入:なぜFILLERが必要なのか
COBOLでファイル定義や画面レイアウトを作成する際、すべてのデータ項目に名前を付ける必要はありません。しかし、実務では「特定のオフセット位置にデータを配置したい」「外部システムとの連携で決められた桁数を空けておく必要がある」といった場面が頻繁に発生します。ここで登場するのが「FILLER」です。FILLERを適切に使うことで、プログラムの可読性を保ちつつ、厳密なデータレイアウトを定義できるようになります。
2. 基礎知識:FILLERの仕組み
FILLERは、その名の通り「埋め草(詰め物)」です。COBOLではデータ項目を定義する際、通常は「05 顧客名 PIC X(20)」のように名前を付けますが、名前を「FILLER」と指定、あるいは省略することで、その領域をプログラム内から「名前で直接参照できない領域」として確保します。これによって、メモリやファイル上のデータ配置を物理的な構造に合わせて調整することが可能になります。
3. 実装/解決策:FILLERの活用術
FILLERは主に以下の3つの目的で使用します。
1. パディング(未使用領域の確保): レコードのレコード長を調整する。
2. 位置合わせ(アライメント): 外部フォーマットに合わせ、特定のバイト数分だけ空白やゼロを挿入する。
3. 可読性の向上: 構造体の区切りを明確にするために使用する。
特に、外部システムから受け取る固定長ファイル(Fixed Length File)のレイアウト定義では、未使用領域をFILLERとして正確に記述することが、バグを防ぐ第一歩となります。
4. サンプルプログラム
以下は、標準的なファイルレイアウト定義のサンプルです。そのままコピーして、コピーブックやデータ部定義の参考にしてください。
01 WS-SAMPLE-RECORD.
- 顧客コード (10バイト)
05 WS-CUST-CODE PIC X(10).
- 未使用領域 (5バイト:FILLERで確保)
05 FILLER PIC X(05) VALUE SPACES.
- 顧客名 (20バイト)
05 WS-CUST-NAME PIC X(20).
- 区切り文字としてカンマを配置 (1バイト)
05 FILLER PIC X(01) VALUE ‘,’.
- 金額 (10桁の数字:ゼロ埋め)
05 WS-AMOUNT PIC 9(10) VALUE ZEROS.
5. 応用・注意点:現場のベテランからのアドバイス
FILLERを使用する際、初心者が陥りやすいミスと注意点をまとめました。
・MOVE CORRESPONDINGには注意
MOVE CORRESPONDING命令を使用する場合、FILLERは名前を持たないため無視されます。しかし、レイアウトが複雑な構造体でFILLERを多用していると、予期せぬ位置ずれを起こすことがあります。大規模な転記を行う際は、可能な限り個別にMOVEすることを推奨します。
・メンテナンス性を考慮する
「名前がないから」といって、やみくもにFILLERを連発すると、後からレイアウト変更があった際にオフセット計算が非常に困難になります。将来的に項目が増える可能性がある場所には、コメント文で「将来拡張用」と記載しておくのがベテランの作法です。
・名前の省略について
多くのコンパイラでは「05 PIC X(10).」のように名前を省略してもFILLERとして扱われますが、明示的に「05 FILLER PIC X(10).」と記述するほうが、ソースコードの意図が明確になり、保守性が格段に上がります。現場のコーディング規約に従いつつ、可能な限り明示することをお勧めします。

コメント