LIKEFILE キーワードに関する規則:

  • LIKEFILE キーワードを使用してファイルを定義した場合には、QUALIFIED キーワードとみなされます。 LIKEFILE キーワードで定義されたファイルでは、自動的にレコード様式が修飾されます。 親ファイル FILE1 のレコード様式が RECA および RECB である場合、新規ファイル FILE2 のレコード様式は、RPG プログラム内では FILE2.RECA および FILE2.RECB によって参照される必要があります。
  • QUALIFIED キーワードは、LIKEFILE キーワードと一緒に指定することはできません。
  • 無視されなかった親ファイルのレコード様式は、すべて新規ファイルで使用できます。
  • LIKEFILE キーワードを指定する場合、パラメーターとして指定されたファイルがあらかじめソース・ファイルに定義されている必要があります。
  • LIKEFILE キーワードがサブプロシージャーで指定され、パラメーターとして指定したファイルがグローバル定義で定義されている場合、コンパイラーは LIKEFILE 定義のスキャン時にグローバル定義を見つけます。
  • LIKEFILE によって定義されたファイルでは、入力仕様および出力仕様は生成されないか、または使用できません。 すべての入出力命令を実行するには、結果データ構造を使用する必要があります。
  • LIKEFILE を使用してファイルを定義する場合は、親ファイルのファイル仕様書で、ファイルをブロック化するかどうかが明確にされている必要があります。 親ファイルに対して、BLOCK キーワードの指定が必須になる場合があります。 例えば、入力 DISK ファイルの場合、そのファイルで使用される演算命令に応じてファイルがブロック化されるため、LIKEFILE キーワードでファイルが使用される際には BLOCK キーワードが必須となります。 Input-Add DISK ファイルの場合、ファイルをブロック化することができないため、BLOCK キーワードは必要ありません。
  • BLOCK(*YES) が指定されたファイルが、LIKEFILE キーワードで指定されたファイルの親ファイルとして使用された場合、親ファイル、または LIKEFILE キーワードを通じて親ファイルに関連するすべてのファイルにおいて、READE、READPE、および READP の各命令を使用することはできません。
  • 親ファイルのプロパティーの中には、新規ファイルに継承されるものとそうでないものとがあります。 継承されるプロパティーのうち、ファイル仕様書のキーワードによって一時変更できるものがあります。 継承されないプロパティーは、ファイル仕様書のキーワードを使って、新規ファイルに対して指定できます。 詳しくは、表 1 を参照してください。
表 1. 継承されるファイル・プロパティーのうち、一時変更できるもの
プロパティーまたはキーワード 親ファイルから継承 新規ファイルに指定可能
ファイル・タイプ (入力、更新、出力、結合) あり なし
ファイルの追加 あり なし
レコード・アドレス・タイプ (RRN、keyed) あり なし
レコード長 (プログラム記述ファイル) あり なし
キーの長さ (プログラム記述ファイル) あり なし
ファイル編成 (プログラム記述ファイル) あり なし
装置 あり なし
変更の始まりALIAS変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
BLOCK あり なし
COMMIT なし あり
DATFMT N/A、注 1 を参照
DEVID なし あり
変更の始まりDISK変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
EXTDESC あり なし
EXTFILE はい、注 2 を参照 あり
EXTIND なし あり
EXTMBR はい、注 2 を参照 あり
FORMLEN あり あり
FORMOFL あり あり
変更の始まりHANDLER 変更の終わり 変更の始まりN/A。HANDLER キーワードは新規ファイルにも親ファイルにもサポートされていません。変更の終わり
IGNORE あり なし
INCLUDE あり なし
INDDS なし あり
INFDS なし あり
INFSR なし あり
変更の始まりKEYED 変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
KEYLOC あり なし
LIKEFILE あり N/A
MAXDEV あり あり
OFLIND なし あり
PASS あり なし
PGMNAME あり あり
PLIST なし あり
PREFIX あり なし
変更の始まりPRINTER変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
PRTCTL なし あり
QUALIFIED N/A、QUALIFIED は新規ファイルに常に暗黙指定される
RAFDATA N/A、注 3 を参照
RECNO なし あり
RENAME あり なし
SAVEDS なし あり
SAVEIND なし あり
変更の始まりSEQ変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
SFILE はい、注 4 を参照 はい、注 4 を参照
SLN なし あり
変更の始まりSPECIAL変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
STATIC なし あり
TEMPLATE なし あり
TIMFMT N/A、注 1 を参照
変更の始まりUSAGE 変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
USROPN なし あり
変更の始まりWORKSTN変更の終わり 変更の始まりあり変更の終わり 変更の始まりなし 変更の終わり
注:
  1. キーワード DATFMT および TIMFMT は、ファイルのプログラム記述の入力仕様にコーディングされる「日付および時刻」フィールドに関連しています。 ただし、LIKEFILE キーワードで定義されるファイルと入力仕様とは無関係です。
  2. RPG ファイルに関連付けられる外部ファイルは、親ファイルと新規ファイルの両方に指定されるキーワード EXTFILE および EXTMBR に応じて異なります。 デフォルトでは、ファイルの名前項目で指定される名前が、各ファイルに関連付けられる外部ファイルを指します。 パラメーターが定数の場合、新規ファイルは親ファイルからキーワード EXTFILE または EXTMBR を継承します。 ただし、これらのキーワードが、新規ファイルに指定されることもあります。 EXTFILE または EXTMBR のパラメーターが定数でない場合、キーワード EXTFILE または EXTMBR は継承されません。 親ファイルおよび新規ファイルの EXTFILE および EXTMBR の値のうち、親ファイルの LIKEFILE で定義されたものに関する例として、実行時に使用される可能性のある外部ファイルについて、以下の表で説明します。
    表 2. ファイル仕様書の例: EXTFILE および EXTMBR
    ファイル仕様書 実行時に使用される外部ファイル (太字部分は、継承される値)
    EXTFILE および EXTMBR の値が両方とも定数である場合の例
    FFILE1  IF  E    DISK
    FFILE2                 LIKEFILE(FILE1)
    *LIBL/FILE1(*FIRST)
    *LIBL/FILE2(*FIRST)
    FFILE1  IF  E    DISK  EXTFILE('MYLIB/MYFILE')
    FFILE2                 LIKEFILE(FILE1)
    MYLIB/MYFILE(*FIRST)
    MYLIB/MYFILE(*FIRST)
    FFILE1  IF  E    DISK
    FFILE2                 LIKEFILE(FILE1) EXTFILE('MYLIB/MYFILE')
    *LIBL/FILE1(*FIRST)
    MYLIB/MYFILE(*FIRST)
    FFILE1  IF  E    DISK  EXTFILE('MYLIB/MYFILE1')
    FFILE2                 LIKEFILE(FILE1) EXTFILE('MYLIB/MYFILE2')
    MYLIB/MYFILE1(*FIRST)
    MYLIB/MYFILE2(*FIRST)
    FFILE1  IF  E    DISK  EXTMBR('MBR1')
    FFILE2                 LIKEFILE(FILE1)
    *LIBL/FILE1(MBR1)
    *LIBL/FILE2(MBR1)
    FFILE1  IF  E    DISK
    FFILE2                 LIKEFILE(FILE1) EXTMBR('MBR1')
    *LIBL/FILE1(*FIRST)
    *LIBL/FILE2(MBR1)
    FFILE1  IF  E    DISK  EXTMBR('MBR1')
    FFILE2                 LIKEFILE(FILE1) EXTFILE('MYLIB/MYFILE2')
    *LIBL/FILE1(MBR1)
    MYLIB/MYFILE2(MBR1)
    EXTFILE および EXTMBR の値が両方とも変数である場合の例
    FFILE1  IF  E    DISK  EXTFILE(extfileVariable)
    FFILE2                 LIKEFILE(FILE1)
    Value of extfileVariable: 'MYLIB/MYFILE'
    MYLIB/MYFILE(*FIRST)
    *LIBL/FILE2(*FIRST)
    FFILE1  IF  E    DISK
    FFILE2                 LIKEFILE(FILE1) EXTFILE(extfileVariable)
    Value of extfileVariable: 'MYLIB/MYFILE'
    *LIBL/FILE1(*FIRST)
    MYLIB/MYFILE(*FIRST)
    FFILE1  IF  E    DISK  EXTFILE(extfileVariable1)
    FFILE2                 LIKEFILE(FILE1) EXTFILE(extfileVariable2)
    Value of extfileVariable1: 'MYLIB/MYFILE1'
    Value of extfileVariable2: 'MYLIB/MYFILE2'
    MYLIB/MYFILE1(*FIRST)
    MYLIB/MYFILE2(*FIRST)
    FFILE1  IF  E    DISK  EXTMBR(extmbrVariable)
    FFILE2                 LIKEFILE(FILE1)
    Value of extmbrVariable: 'MBR1'
    *LIBL/FILE1(MBR1)
    *LIBL/FILE2(*FIRST)
    FFILE1  IF  E    DISK
    FFILE2                 LIKEFILE(FILE1) EXTMBR(extmbrVariable)
    Value of extmbrVariable: 'MBR1'
    *LIBL/FILE1(*FIRST)
    *LIBL/FILE2(MBR1)
    FFILE1  IF  E    DISK  EXTMBR(extmbrVariable)
    FFILE2                 LIKEFILE(FILE1) EXTFILE(extfileVariable)
    Value of extmbrVariable: 'MBR1'
    Value of extfileVariable: 'MYLIB/MYFILE2'
    *LIBL/FILE1(MBR1)
    MYLIB/MYFILE2(*FIRST)
    EXTFILE および EXTMBR の値に変数と定数が混用されている場合の例
    FFILE1  IF  E    DISK  EXTFILE(extfileVariable1) EXTMBR('MBR1')
    FFILE2                 LIKEFILE(FILE1)
    Value of extfileVariable1: 'MYLIB/MYFILE1'
    MYLIB/MYFILE1(MBR1)
    *LIBL/FILE2(MBR1)
    FFILE1  IF  E    DISK  EXTMBR(extmbrVariable)
    FFILE2                 LIKEFILE(FILE1)
    Value of extmbrVariable: 'MBR1'
    *LIBL/FILE1(MBR1)
    *LIBL/FILE2(*FIRST)
    FFILE1  IF  E    DISK  EXTFILE('MYLIB/MYFILE1') EXTMBR(extmbrVariable)
    FFILE2                 LIKEFILE(FILE1)
    Value of extmbrVariable: 'MBR1'
    MYLIB/MYFILE1(MBR1)
    MYLIB/MYFILE1(*FIRST)
  3. RAFDATA キーワードは、1 次ファイルおよび 2 次ファイルにのみ関係します。 ただし、親ファイルは全手順ファイルでなければなりません。
  4. SFILE キーワードは、レコード様式をサブファイル・レコード様式にするよう指定し、サブファイルに相対レコード番号を指定する際に使用する変数の名前も指定します。 特定のレコード様式がサブファイル・レコード様式であることを、新規ファイルは自動的に継承します。 ただし、RRN の指定に使用される変数の名前は継承しません。 サブファイルに相対レコード番号を指定するのに使用する変数を指定するために、新規ファイルに SFILE キーワードを指定する必要があります。