EXTFILE(ファイル名 | *EXTDESC)
EXTFILE キーワードは、どのライブラリーのどのファイルがオープンされるかを指定します。
ファイル名 には、リテラルまたは変数を指定できます。
値は次のいずれの形式でも指定できます。
ファイル名
ライブラリー名/ファイル名
*LIBL/ファイル名
特殊値 *EXTDESC を使用すると、EXTDESC キーワードのパラメーターが EXTFILE キーワードに対しても使用されることを指定できます。注:
- ライブラリー名として *CURLIB は指定できません。
- ライブラリー名の指定なしにファイル名を指定した場合は、*LIBL が使用されます。
- 名前の大文字小文字は正確でなければなりません。たとえば、EXTFILE(ファイル名) を指定しその変数であるファイル名の値が 'qtemp/myfile' だったとすると、そのファイルは見付からないことになります。 ファイル名の値は 'QTEMP/MYFILE' でなければなりません。
- このキーワードは、コンパイル時に外部記述ファイルを見付けるのには使用されることはありません。コンパイル時には、EXTDESC キーワードを使用してファイルを見つけます。
- EXTFILE(*EXTDESC) を指定した場合、ファイルに対しても、 あるいはファイルが LIKEFILE キーワードを指定して定義されている場合には親ファイルに対しても、EXTDESC キーワードを指定する必要があります。
- 変数名が使用される場合、その変数はファイルがオープンされる前に設定されていることが必要です。
RPG サイクルの初期化部分で自動的にオープンされるファイルの場合、
変数を以下のいずれかの方法によって設定しておく必要があります。
- D 仕様書で INZ キーワードを使用する。
- 値を入力パラメーターとして渡す。
- 別のモジュールによって設定される、プログラムのグローバル変数を使用する。
RPG がオープンするファイルに対して一時変更を指定してある場合、その一時変更は効力を持ちます。
次のコーディングにおいて、RPG プログラム内で INPUT という名前を持つファイルの場合、実行時にオープンされるファイルは
ファイル名 フィールドの値によって決まります。
Finput if f 10 disk extfile(filename)
ファイル名 フィールドの値が実行時に MYLIB/MYFILE
であれば、RPG はファイル MYLIB/MYFILE をオープンすることになります。コマンド
OVRDBF MYFILE OTHERLIB/OTHERFILE が使用された場合は、オープンされる実際のファイルは
OTHERLIB/OTHERFILE になります。INPUT はこの RPG
ソース・メンバーの中で使用されている唯一の名前であるため、名前 INPUT に対してはいかなる一時変更も無視されることに注意してください。図 1. EXTFILE キーワードの例
* The name of the file is known at compile time
Ffile1 IF F 10 DISK EXTFILE('MYLIB/FILE1')
Ffile2 IF F 10 DISK EXTFILE('FILE2')
* The name of the file is in a variable which is
* in the correct form when the program starts.
* Variable "filename3" must have a value such as
* 'MYLIB/MYFILE' or 'MYFILE' when the file is
* opened during the initialization phase of the
* RPG program.
Ffile3 IF F 10 DISK EXTFILE(filename3)
* The library and file names are in two separate variables
* The USROPN keyword must be used, so that the "filename4"
* variable can be set correctly before the file is opened.
Ffile4 IF F 10 DISK EXTFILE(filename4)
F USROPN
D filename4 S 21A
* EXTFILE variable "filename4" is set to the concatenated
* values of the "libnam" and "filnam" variables, to form
* a value in the form "LIBRARY/FILE".
C EVAL filename4 = %trim(libnam) + '/' + filnam
C OPEN file4
* At compile time, file MYLIB/MYFILE5 will be used to
* get the external definition for the file "file5",
* due to the EXTDESC keyword.
* At runtime, the file MYLIB/MYFILE5 will be opened,
* due to the EXTFILE(*EXTDESC) keyword.
Ffile5 if e DISK
F EXTFILE(*EXTDESC)
F EXTDESC('MYLIB/MYFILE5')