外部記述データベース・ファイルの入力レコードに、複数のフィールドがまったく同じように定義されている場合には、データ構造を定義して、それらのフィールドをまるで 1 つの配列であるかのように処理することができます。 以下の 3 つのケースを検討してみます。
A R REC
A FLD1 5P 0
A FLD2 5P 0
A FLD3 5P 0
A OTHER 10A
この場合は、外部記述データ構造を使用し、配列を追加サブフィールドとして定義します。
次に OVERLAY キーワードを指定して、その配列をフィールドにマッピングします。
FMYFILE IF E DISK
D myDS E DS EXTNAME(MYFILE)
D fldArray LIKE(FLD1) DIM(3)
D OVERLAY(myDs)
C READ MYFILE
C FOR i = 1 to %ELEM(fldArray)
C* ... process fldArray(i)
C ENDFOR
A R REC
A OTHER1 10A
A ... more fields
A FLD1 15A
A FLD2 15A
A FLD3 15A
A OTHER2 10A
この場合は、外部記述データ構造を使用し、配列を独立フィールドとして定義します。
次に、BASED キーワードを使用して、その配列をフィールドにマッピングし、先頭フィールドのアドレスを指す基底ポインターを初期化します。
FMYFILE IF E DISK
D myDS E DS EXTNAME(MYFILE)
D fldArray S LIKE(FLD1) DIM(3)
D BASED(pFldArray)
D pFldArray S * INZ(%addr(FLD1))
C READ MYFILE
C FOR i = 1 to %ELEM(fldArray)
C* ... process fldArray(i)
C ENDFOR
A R REC
A OTHER1 10A
A FLD1 T TIMFMT(*ISO)
A FLD2 T TIMFMT(*ISO)
A OTHER2 10A
A FLD3 T TIMFMT(*ISO)
A OTHER3 10A
この場合は、プログラム記述データ構造を定義し、いかなるタイプの情報も定義せずに、その配列に使用するフィールドを列挙します。
次に、OVERLAY キーワードを使用して、配列をフィールドにマッピングします。
FMYFILE IF E DISK
D myDS DS
D FLD1
D FLD2
D FLD3
D fldArray LIKE(FLD1) DIM(3)
D OVERLAY(myDs)
C READ MYFILE
C FOR i = 1 to %ELEM(fldArray)
C* ... process fldArray(i)
C ENDFOR