同一の外部記述フィールドから配列をロードする
外部記述データベース・ファイルの入力レコードに、複数のフィールドがまったく同じように定義されている場合には、データ構造を定義して、それらのフィールドをまるで 1 つの配列であるかのように処理することができます。 以下の 3 つのケースを検討してみます。
- フィールドがレコード内で連続しており、かつレコードの先頭にある場合
この場合は、外部記述データ構造を使用し、配列を追加サブフィールドとして定義します。 次に OVERLAY キーワードを指定して、その配列をフィールドにマッピングします。A R REC A FLD1 5P 0 A FLD2 5P 0 A FLD3 5P 0 A OTHER 10AFMYFILE 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 - フィールドがレコード内で連続しており、かつレコードの先頭にはない場合
この場合は、外部記述データ構造を使用し、配列を独立フィールドとして定義します。 次に、BASED キーワードを使用して、その配列をフィールドにマッピングし、先頭フィールドのアドレスを指す基底ポインターを初期化します。A R REC A OTHER1 10A A ... more fields A FLD1 15A A FLD2 15A A FLD3 15A A OTHER2 10AFMYFILE 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 - フィールドがレコード内で連続していない場合
この場合は、プログラム記述データ構造を定義し、いかなるタイプの情報も定義せずに、その配列に使用するフィールドを列挙します。 次に、OVERLAY キーワードを使用して、配列をフィールドにマッピングします。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 10AFMYFILE 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