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 を参照してください。
| プロパティーまたはキーワード | 親ファイルから継承 | 新規ファイルに指定可能 |
|---|---|---|
| ファイル・タイプ (入力、更新、出力、結合) | あり | なし |
| ファイルの追加 | あり | なし |
| レコード・アドレス・タイプ (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![]() |
あり![]() |
なし ![]() |
注:
- キーワード DATFMT および TIMFMT は、ファイルのプログラム記述の入力仕様にコーディングされる「日付および時刻」フィールドに関連しています。 ただし、LIKEFILE キーワードで定義されるファイルと入力仕様とは無関係です。
- 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) - RAFDATA キーワードは、1 次ファイルおよび 2 次ファイルにのみ関係します。 ただし、親ファイルは全手順ファイルでなければなりません。
- SFILE キーワードは、レコード様式をサブファイル・レコード様式にするよう指定し、サブファイルに相対レコード番号を指定する際に使用する変数の名前も指定します。 特定のレコード様式がサブファイル・レコード様式であることを、新規ファイルは自動的に継承します。 ただし、RRN の指定に使用される変数の名前は継承しません。 サブファイルに相対レコード番号を指定するのに使用する変数を指定するために、新規ファイルに SFILE キーワードを指定する必要があります。
ALIAS