COBOL2002 使用の手引 手引編

[目次][用語][索引][前へ][次へ]

6.11.1 ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力

固定長形式の順ファイルで,ファイルサイズがレコード長の整数倍でない場合に,最終レコードの長さが定義レコード長より短くても入力できるようにする機能です。

<この項の構成>
(1) 環境変数の指定
(2) 環境変数の指定有無による結果の違い
(3) 注意事項

(1) 環境変数の指定

環境変数CBLD_ファイル名にSAMENDIOを指定すると,最終レコードが定義レコード長より短い場合でもエラーにならなくなり,残りのレコードの入出力を行えます。

形式
 
CBLD_ファイル名=SAMENDIO
 

環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで,入出力時の結果が異なります。なお,SAMENDIOを指定しない場合には,NOSAMENDIOが仮定されます。詳細は,「34.3.2 実行時環境変数の一覧」を参照してください。

(2) 環境変数の指定有無による結果の違い

環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで,それぞれの入出力文の動作の違いを次に示します。

(a) READ文

表6-9 入力するレコードがレコード長より短い場合のREAD文の動作

CBLD_ファイル名の指定 READ文の動作
NOSAMENDIO
または指定なし
入力するレコードがレコード長より短い場合,エラーになります。
このとき,入出力状態の値は「30」になります。
SAMENDIO 入力するレコードがレコード長より短い場合,エラーにならないで残りのレコードを読み込みます。レコード長の残りには,半角の空白「X'20'」を埋めます。このとき,入出力状態の値は「00」になり,プログラムの実行は継続します。
(b) REWRITE文

REWRITE文を実行するには,直前のREAD文が実行済みでなければなりません。

環境変数CBLD_ファイル名にSAMENDIOを指定した場合,直前のREAD文で読み込んだ分のレコードを書き換えます。

表6-10 更新するレコードがレコード長より短い場合のREWRITE文の動作

CBLD_ファイル名の指定 REWRITE文の動作
NOSAMENDIO
または指定なし
直前のREAD文が実行時エラーになるので,REWRITE文も実行されません。
SAMENDIO 直前のREAD文で読み込んだレコード長が,定義レコード長よりも短い場合は,READ文で読み込んだ分のレコードを書き換えます。このとき,入出力状態の値は「00」になります。
(c) その他の入出力文

READ文およびREWRITE文以外の入出力文での入出力機能は,ファイルサイズがレコード長の整数倍である固定長ファイルの場合と同じです。

(3) 注意事項