形式の再定義

ALL-FORMATS または -I-O 句に対して生成される可能性がある REDEFINES 文節には、特別な注意を払う必要があります。 すべての形式が同一の区域 (一般にバッファー域) で再定義されるため、複数のフィールド名が同一のストレージを記述する可能性があり、 形式の区域全体が各出力操作に先立って再初期設定されない場合には、予測できない結果が生じる可能性があります。

MOVE CORRESPONDING ステートメントで指定されたデータ項目に従属するデータ項目は、 それが REDEFINES 文節を含むか、または再定義項目に従属する場合には一致せず、移動されません。

再初期設定を回避するには、-I および -O 接尾部を指定した複数の形式 2 の COPY ステートメント (DDS または DD) を使用して、 作業用ストレージ・セクションまたはローカル・ストレージ・セクションで各形式または形式タイプ (入力または出力) 用の別々のストレージ域を作成できます。 これらのレコード形式を READ INTO および WRITE FROM ステートメントで使用できます。 例えば、次のとおりです。
FD ORDER-ENTRY-SCREEN . . .
01 ORDER-ENTRY-RECORD . . .
   .
   .
   .
WORKING-STORAGE SECTION.
01 ORDSFL-I-FORMAT.
   COPY DDS-ORDSFL-I OF DOESCR.
01 ORDSFL-O-FORMAT.
   COPY DDS-ORDSFL-O OF DOESCR.
   .
   .
   .
PROCEDURE DIVISION.
   .
   .
   .
READ SUBFILE ORDER-ENTRY-SCREEN NEXT MODIFIED RECORD
   INTO ORDSFL-I-FORMAT FORMAT IS "ORDSFL"
   AT END SET NO-MODIFIED-SUBFILE-RCD TO TRUE.
   .
   .
   .
MOVE CORR ORDSFL-I TO ORDSFL-O.
REWRITE SUBFILE ORDER-ENTRY-RECORD FROM ORDSFL-O-FORMAT
                           FORMAT IS "ORDSFL" . . .
   .
   .
   .
注: COPY ステートメントは、ファイル・セクション、作業用ストレージ・セクション、 およびローカル・ストレージ・セクションで使用できますが、得られる結果が全く同じ というわけではありません。詳細については キー生成の例を参照してください。