可変長レコード・ファイルの処理

可変長レコードは、DISK 装置タイプに関連付けられているデータベース・ファイルに対してのみサポートされています。

可変長レコードの DISK ファイルを記述する

ファイルの最大レコード長と最小レコード長を定義するには、ファイルの FD 項目に形式 2 の RECORD 文節を指定します。

DATA DIVISION の中で可変長レコードの順次ファイルを記述する簡単なファイル記述項目は、 以下のようなものになります。

FILE SECTION.
FD  sequential-file-name
    RECORD IS VARYING IN SIZE
              FROM integer-6 TO integer-7
              DEPENDING ON data-name-1.
01  minimum-sized-record.
    05  minimum-sized-element     PIC X(integer-6).
01  maximum-sized-record.
    05  maximum-sized-element     PIC X(integer-7).

·
·
·
WORKING-STORAGE SECTION. 77 data-name-1 PIC 9(5).
·
·
·

ファイルの中のレコードの最小レコード・サイズは、integer-6 によって定義されます。 ファイルの中のレコードの最大レコード・サイズは、integer-7 によって定義されます。 integer-6 で指定されるものよりレコード長が短いファイルや integer-7 で指定されるものよりレコード長が長いファイルのレコード記述は作成しないようにしてください。 この規則を破るレコード記述があると、ILE COBOL コンパイラーからコンパイル時エラー・メッセージが出されます。 また、ILE COBOL コンパイラーは、レコード記述の中にレコード長が integer-7 になるようなレコード記述がない場合にも、コンパイル時エラー・メッセージを出します。

可変長レコードを含む索引付きファイルの場合、 基本レコード・キーはレコードの最初の 'n' 個の文字位置に含まれていなければなりません ('n' はそのファイルに指定されている最小レコード・サイズ)。 FD 項目の処理において ILE COBOL コンパイラーは、RECORD KEY がレコードの固定部分の中に入っているかどうかを検査します。 この規則に違反するキーがあると、エラー・メッセージが出されます。

可変長レコードの DISK ファイルのオープン

可変長レコードのデータベース・ファイルの OPEN ステートメントが正常に実行されるためには、次の条件が満たされている必要があります。

上記の条件のどれかが満たされていなければエラー・メッセージが生成され、ファイル状況 39 が戻され、オープン操作は失敗に終わります。

SHARE(*YES) が指定されているデータベース・ファイルに対してオープン操作を実行しようとした場合、 そのファイルがすでにオープンされていても現行のオープン操作とは異なるレコード長のものであるなら、 エラー・メッセージが生成され、ファイル状況 90 が戻されます。

可変長レコードの DISK ファイルの読み書き

可変長レコードに対して READ、WRITE、または REWRITE ステートメントが実行される場合、 そのレコードのサイズは data-name-1 の内容で定義されます。

可変長レコードの処理方法の詳細については、「WebSphere Development Studio: ILE COBOL 解説書」の形式 2 の RECORD 文節の部分を参照してください。

データベース・ファイルから可変長レコードを読み込むには、READ ステートメントを使います。 READ 操作が正常に実行された場合、data-name-1 が指定されているなら、 読み取ったレコードの文字位置数がそれに入れられます。 READ 操作が失敗した場合、data-name-1 は READ 操作が試行される前の値のままです。

READ ステートメントに INTO 句を指定した場合、現行レコードの中で、 暗黙の MOVE ステートメントの中の送り出し項目として加わっている文字位置数は、以下のようにして決められます。

READ ステートメント実行時に、 読み込んだレコードの中の文字位置の数がそのファイルのレコード記述項目で指定されている最小レコード長より小さい場合は、 レコード域のうち読み込まれた有効な最後の文字の右の部分にブランクが埋め込まれます。 読み込んだレコードの中の文字位置の数がそのファイルのレコード記述項目で指定されている最大レコード長より大きい場合は、 レコードは、レコード記述項目で指定されている最大レコード・サイズの右側で切り捨てられます。 読み込んだレコードの長さが、ファイルのファイル記述項目の RECORD 文節で定義されている最小レコード長と最大レコード長の間にない場合には、 ファイル状況 04 が戻されます。

データベース・ファイルに可変長レコードを書き込むには、WRITE ステートメントまたは REWRITE ステートメントを使います。 書き込むレコードの長さは、data-name-1 に指定します。 data-name-1 を指定しない場合、書き込むレコードの長さは以下のようにして決められます。