PREFIX(接頭部{:置き換えられる文字数})

PREFIX キーワードは、外部記述ファイル中のフィールドの名前を部分的に変更す るために使用されます。 最初のパラメーターで指定された文字は、7 から 16 桁目に指定されたファイルのすべてのレコードに定義されたすべてのフィールドの名前に対する接頭部になります。 文字は、名前 (例えば PREFIX(F1_))、または文字リテラル (例えば PREFIX('F1_')) として指定できます。 接頭部にピリオドが含まれる場合 (例えば PREFIX('F1DS.') または PREFIX('F1DS.A')) には、文字リテラルを使用する必要があります。 それぞれの名前の先頭から文字を削除するには、 最初のパラメーターとして空のストリングを PREFIX('':削除する数) のように指 定します。 さらに、既存の名前の中で置き換えられる文字 (それがあった場合) の数を指示する 数値をオプションで指定することができます。 「置き換えられる文字数」を指定しない場合には、名前の先頭にストリングが付加さ れます。

「置き換えられる文字数」を指定する場合には、0 から 9 の値を含み、小数点以下の桁数 のない数値定数としなければなりません。 たとえば、PREFIX(YE:3) の指定によって、フィールド名 'YTDTOTAL' が 'YETOTAL' に変更されます。ゼロの値の指定は、「置き換えられる文字数」をまったく指定しないことと同じです。

規則は次のとおりです。

例:

以下の例では、ファイル 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 のサブフィールドに関連付けるために、接頭部 'MYDS.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)