6.11.1 ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力
固定長形式の順ファイルで,ファイルサイズがレコード長の整数倍でない場合に,最終レコードの長さが定義レコード長より短くても入力できるようにする機能です。
- 〈この項の構成〉
(1) 環境変数の指定
環境変数CBLD_ファイル名にSAMENDIOを指定すると,最終レコードが定義レコード長より短い場合でもエラーにならなくなり,残りのレコードの入出力を行えます。
- 形式
CBLD_ファイル名=SAMENDIO
環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで,入出力時の結果が異なります。なお,SAMENDIOを指定しない場合には,NOSAMENDIOが仮定されます。詳細は,「35.3.2 実行時環境変数の一覧」を参照してください。
(2) 環境変数の指定有無による結果の違い
環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで,それぞれの入出力文の動作の違いを次に示します。
(a) READ文
CBLD_ファイル名の指定 |
READ文の動作 |
---|---|
NOSAMENDIO または指定なし |
入力するレコードがレコード長より短い場合,エラーになります。 このとき,入出力状態の値は「30」になります。 |
SAMENDIO |
入力するレコードがレコード長より短い場合,エラーにならないで残りのレコードを読み込みます。レコード長の残りには,半角の空白「X'20'」を埋めます。このとき,入出力状態の値は「00」になり,プログラムの実行は継続します。 |
(b) REWRITE文
REWRITE文を実行するには,直前のREAD文が実行済みでなければなりません。
環境変数CBLD_ファイル名にSAMENDIOを指定した場合,直前のREAD文で読み込んだ分のレコードを書き換えます。
CBLD_ファイル名の指定 |
REWRITE文の動作 |
---|---|
NOSAMENDIO または指定なし |
直前のREAD文が実行時エラーになるので,REWRITE文も実行されません。 |
SAMENDIO |
直前のREAD文で読み込んだレコード長が,定義レコード長よりも短い場合は,READ文で読み込んだ分のレコードを書き換えます。このとき,入出力状態の値は「00」になります。 |
(3) 注意事項
-
この機能を使用してファイル中の最終レコードを読み込むとき,最終レコードがプログラム中で定義したレコード長より短いために,定義したレコード長より短いレコード長しか読み込めなくてもCOBOLはエラーや警告メッセージを出力しません。そのため,実際に読み込んだレコード長は,ユーザプログラム側で管理しておく必要があります。
-
この機能は,ファイル内の全データをレコードとして入力できるだけで,レコードフォーマットの形態,レコードのブロッキングおよびデブロッキングはユーザプログラム側で管理しておく必要があります。