COBOL2002 使用の手引 手引編


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

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

〈この項の構成〉

(1) 環境変数の指定

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

形式
CBLD_ファイル名=SAMENDIO

環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで,入出力時の結果が異なります。なお,SAMENDIOを指定しない場合には,NOSAMENDIOが仮定されます。詳細は,「35.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) 注意事項