PREFIX(接頭部 {:置き換えられる文字数 })
PREFIX キーワードは、外部記述ファイル中のフィールドの名前を部分的に変更する
ために使用されます。最初のパラメーターで指定される文字が、
外部記述ファイルのすべてのレコード内に定義されたすべてのフィールドの名前に
接頭部として付加されます。文字は、名前 (例えば PREFIX(F1_))、または文字リテラル (例えば PREFIX('F1_')) として指定できます。
接頭部にピリオドが含まれる場合 (例えば PREFIX('F1DS.') または PREFIX('F1DS.A')) には、文字リテラルを使用する必要があります。
それぞれの名前の先頭から文字を削除するには、
最初のパラメーターとして空のストリングを PREFIX('':削除する数) のように指
定します。さらに、既存の名前の中で置き換えられる文字 (それがあった場合) の数を指示する
数値をオプションで指定することができます。 「置き換えられる文字数」を指定しない場合には、名前の先頭にストリングが付加さ
れます。
「置き換えられる文字数」を指定する場合には、0 から 9 の値を含み、小数点以下の桁数 のない数値定数としなければなりません。 たとえば、PREFIX(YE:3) の指定によって、フィールド名 'YTDTOTAL' が 'YETOTAL' に変更されます。ゼロの値の指定は、「置き換えられる文字数」をまったく指定しないことと同じです。
別名に接頭部を適用する場合、「置き換えられる文字数」のパラメーターは使用されません。 PREFIX キーワードと ALIAS キーワードの相互の影響については、ALIAS キーワードを参照してください。
規則は次のとおりです。
- あるファイルについて PREFIX キーワードが指定されている場合に入力仕様のフィールドを明示的に名前変更するには、
入力仕様の「外部フィールド名 (External Field Name)」(桁 21 - 30) に指定する、
正しいフィールド名を選択する必要があります。
指定する名前は、名前変更を指定する前に接頭部付きの名前が使用されていたかどうかによって異なります。
- 以前に接頭部付きの名前に対する参照が行われている場合には、接頭部付きの名前を指定する必要があります。
- 以前に接頭部付きの名前に対する参照が行われていない場合には、 入力フィールドの外部名を指定する必要があります。
接頭部を適用した後の名前の合計長が RPG フィールド名の最大長を超えては
なりません。ファイルが LIKEFILE キーワードも QUALIFIED キーワードも指定せずに定義された
グローバル・ファイルである場合、名前全体の長さは、
入力仕様および出力仕様の「名前」記入項目の長さである 14 文字を超えてはなりません。
- 接頭部が付けられる名前の文字数が、「置き換えられる文字数」パラメーター によって表された値以下であってはなりません。つまり、接頭部を適用した後の名前が、接頭部ストリングと同じ 長さになってはならない、ということです。
- 接頭部が文字リテラルの場合は、ピリオドを含めるか、またはピリオドで終わることができます。 この場合、フィールド名はすべて、同一の修飾されたデータ構造のサブフィールドであることが必要です。データ構造は、修飾されたデータ構造として定義する必要があります。 例えば PREFIX('F1DS.') の場合、データ構造 F1DS は修飾されたデータ構造として定義する必要があり、ファイルにフィールド FLD1 および FLD2 があるときは、データ構造にはサブフィールド F1DS.FLD1 および F1DS.FLD2 が必要です。 同様に、PREFIX('F2DS.A') の場合、データ構造 F2DS は修飾されたデータ構造である必要があり、ファイルにフィールド FLD1 および FLD2 があるときは、データ構造にはサブフィールド F2DS.AFLD1 および F2DS.AFLD2 が必要です。
- 接頭部が文字リテラルの場合は英大文字でなければなりません。
- 外部記述データ構造がファイル内のフィールドの定義に使用されている場合は、ファイル内のフィールド名がデータ構造のサブフィールド名と同一であることを確認する必要があります。
以下の表には、名前「XYNAME」に複数の接頭部が付けられる場合の、外部記述ファイルおよび外部記述データ構造に必要な接頭部が示されています。
「内部名」の列にドットが含まれる場合 (例えば D1.NAME)、外部記述データ構造は QUALIFIED として定義され、ファイル指定の PREFIX にドットを含める必要があります。
ファイルの PREFIX 外部記述データ構造の PREFIX 内部名 PREFIX(A) PREFIX(A) AXYNAME PREFIX(A:2) PREFIX(A:2) ANAME PREFIX('D.') なし D.XYNAME PREFIX('D.' : 2) PREFIX('' : 2) D.NAME PREFIX('D.A') PREFIX(A) D.AXYNAME PREFIX('D.A' : 2) PREFIX(A : 2) D.ANAME PREFIX('':2) PREFIX('' : 2) NAME
例:
以下の例では、ファイル NEWFILE のフィールド名の先頭に接頭部「NEW_」を追加し、ファイル OLDFILE のフィールド名の先頭に「OLD_」を追加しています。
Fnewfile o e disk prefix(NEW_)
Foldfile if e disk prefix(OLD_)
C READ OLDREC
C EVAL NEWIDNO = OLD_IDNO
C EVAL NEWABAL = OLD_ABAL
C WRITE NEWREC
以下の例では、ファイル FILE1 および外部記述データ構造 DS1 の両方で PREFIX(N:2) を使用しています。
ファイル指定の接頭部により、FILE1 のフィールド XYIDNUM および
XYCUSTNAME はプログラム内で NIDNUM および NCUSTNAME として認識される
ようになります。また、データ指定の接頭部により、データ構造にはサブフィールド NIDNUM および NCUSTNAME が存在するようになります。
READ 命令時にレコードからのデータは DS1 のサブフィールドに移動され、サブプロシージャー processRec に受け渡されてレコード内のデータが処理されます。
Ffile1 if e disk prefix(N:2)
D ds1 e ds extname(file1) prefix(N:2)
C READ file1
C CALLP processRec (ds1)
以下の例では、MYFILE 内のフィールドを修飾されたデータ構造 MYDS
のサブフィールドに関連付けるために、接頭部 'MYDS.' を使用します。
Fmyfile if e disk prefix('MYDS.')
D myds e ds qualified extname(myfile)
次の例では、MYFILE 内のフィールドを修飾されたデータ構造 MYDS2
のサブフィールドに関連付けるために、接頭部 'MYDS2.F2':3 を使用します。サブフィールドそのものには、先頭の
3 文字を 'F2' で置き換えることにより、さらに接頭部が付きます。このファイルが使用するフィールドは、MYDS2.F2FLD1 と MYDS2.F2FLD2 になります。
(データ構造 MYDS2 は同じ接頭部を使用して定義される必要がありますが、
これはデータ構造名は含まないために、まったく同じ名前にはなりません。)
A R REC
A ACRFLD1 10A
A ACRFLD2 5S 0
Fmyfile2 if e disk prefix('MYDS2.F2':3)
D myds2 e ds qualified extname(myfile)
D prefix('F2':3)