組み合わせ問題

RPG III 言語と RPG IV 言語との相違点のために、変換援助プログラムは、特 定のソースの順序を変えなければなりません。この順序変えの例は、RPG III ソース・メンバー TEST1 の場合の ソース変換の例に示されています。データ構造 DS1 の配置を 図 1図 2 で比較した場合に、データ構造 DS1 が レコード様式 FORMAT1 の前にくるように移動されたことが 分ります。

今、RPG III メンバー TEST1 が 2 つのメンバー TEST2 および COPYDS1 に分割 されているものとします。ここで、データ構造 DS1 と名前付き固定情報 CONST1 は、 コピー・メンバー COPYDS1 に入っています。 このコピー・メンバーはソース TEST2 に含まれます。 図 1図 2 は、 それぞれ TEST2 と COPYDS1 のソースを示します。

図 1. TEST2 の RPG III ソース
     H                                                                    TSTPGM
     FFILE1   IF  E                    DISK                               COMM1
     FQSYSPRT O   F     132     OF    LPRINTER
     LQSYSPRT  60FL 56OL
     E                    ARR1    3   3  1               COMM2
     E                    ARR2    3   3  1
     IFORMAT1
     I              OLDNAME                         NAME
      /COPY COPYDS1
     C           ARR1,3    DSPLY
     C                     READ FORMAT1                  01
     C           NAME      DSPLY
     C                     SETON                     LR
     C                     EXCPTOUTPUT
     OQSYSPRT E   01           OUTPUT
     O                         ARR2,3    10
**
123
**
456
図 2. COPYDS1 の RPG III ソース
     I* DATA STRUCTURE COMMENT
     IDS1         DS
     I                                        1   3 FIELD1
     I* NAMED CONSTANT COMMENT
     I              'XYZ'                 C         CONST1                COMM3
     I                                        4   6 ARR1

この場合には、変換援助プログラムはメンバー TEST2 およびコピー・メンバー COPYDS1 の両方を正しく変換します。 ただし、コピー・メンバーは、コンパイル時に 組み込まれる時に、/COPY コンパイラー指示ステートメントが置かれている FORMAT1 の下に 挿入されます。 結果として、コピー・メンバー COPYDS1 のすべてのソース行が "ソース・レコードの順序が 違っている" というエラーを受け取ります。 RPG IV では、定義仕様書は入力仕様書より前になければなりません。

/COPY メンバーの内容が不明なので、変換援助 プログラムは /COPY 指示ステートメントを FORMAT1 の上に移動できなかった ことに、注意してください。

この種の問題の訂正方法には次の 2 つがあります。
  1. CVTRPGSRC コマンドの EXPCPY(*YES) オプションを使用して、変換後の RPG IV ソース・メンバーにすべての /COPY メンバーを組み込む。

    この方法は簡単であり、時間を最も有効に利用できます。ただし、各ソース・メンバーに /COPY メンバーを 含むことにより、アプリケーション・プログラムの保守容易性は減少します。

  2. ILE RPG コンパイラー・リストや「IBM® Rational® Development Studio for i: ILE RPG 解説書」の情報を使用して、変換後にコードを手動で修正する。
この種の問題の例としては、ほかに次のものがあります。
  • ファイル仕様書 (補足 L) およびレコード・アドレス・ファイル

    RPG III の場合、ファイル仕様書 (補足 L) およびファイル仕様書 (補足 E) のレコード・アドレス・ファイルは、ファイル記述仕様書のキーワード (RAFDATA、FORMLEN、および FORMOFL) に変更されます。 /COPY メンバーの内容に、ファイル仕様書 (補足 L) またはファイル仕様書 (補足 E) の レコード・アドレス・ファイル、あるいはその両方が含まれているが、 対応するファイル記述仕様書が含まれていない場合には、 変換援助プログラムはキーワードの挿入位置が分りません。

  • ファイル仕様書 (補足 E) の配列およびデータ構造サブフィールド

    ソース変換の例で述べたように、RPG IV では、独立型配列とデータ 構造サブフィールドを同じ名前で定義することはできません。したがって、例 TEST1 (図 2) で示したように、変換 援助プログラムはこの 2 つの定義を組み合わせなければなりません。しかし、配列およびデータ構造サブフィールドが同じソース・メンバーにない (すなわち、一方または両方が /COPY メンバーにある) 場合には、 この組み合わせを実行することはできず、結果としてコンパイル時エラーと なります。

  • 組み合わされたコンパイル時配列およびコンパイル時データ (**) レコード

    例 TEST1 (図 2) で示したように、コンパイル時配列がデー タ構造サブフィールド定義と組み合わされた場合には、配列データのロードが 影響を受けることがあります。 この問題を解決するために、少なくとも 1 つのコンパイル時配列が組み合わ された場合には、コンパイル時配列データが新しい **CTDATA 形式に変更され ます。 しかし、配列およびデータが同じソース・メンバーにない (すなわち、一方 または両方が COPY メンバーにある) 場合には、**CTDATA 形式を使用するコンパイル時 データ・レコードの命名は適切に進めることはできません。