制御レベル標識に関する規則

制御レベル標識を割り当ている場合には、以下の点に留意してください。
  • 制御フィールドは、1 次または 2 次ファイルに対してだ け指定することができます。
  • 制御フィールドを、全手順ファイル、 タイプが 2 進数、整数、符号なしまたは浮動の数値入力フィールド あるいは先読みフィールドに対して指定することはできません。
  • 入力仕様の 49 から 62 桁目に配列名が指定された時には、制御レベル標識を 使用することはできません。しかし、配列要素と一緒に制御レベル標識を使 用することはできます。 制御レベル標識は、ヌル値可能フィールドに使用することはできません。
  • 制御レベル比較操作の処理は、レコードが入っていたファイルにかかわりな く、レコードが見付かった順序で行われます。
  • 異なるレコード・タイプまたは異なるファイルに同じ制御レベル標識を使用 する場合には、その制御レベル標識と関連した制御フィールドは、同じ長さでな ければなりません (図 1 を参照)。ただし、日付、時刻、お よびタイム・スタンプ・フィールドについてはタイプが一致しているだけで (すなわ ち、形式が異なっていても) かまいません。
  • 制御レベル標識フィールドの長さは、制御レベル標識のレコード内における 長さです。 例えば、L1 がレコード内で 10 バイトのフィールド長を持っていれ ば、L1 の制御レベル標識フィールドの長さは 10 桁です。

    分割制御フィールドの場合の制御レベル標識フィールドの長さは、ある制御レ ベル標識と関連した、レコード内のすべてのフィールドの長さの合計です。 L2 が 長さ 12 バイト、2 バイト、および 4 バイトの 3 つのフィールドから構成される 分割制御フィールドを持っている場合には、L2 の制御レベル標識フィールドの長 さは 18 桁になります。

    複数のレコードが同じ制御レベル標識を使用する場合、制御レベル標識フィー ルドの長さは、1 つのレコードだけの長さです。それらのレコードのすべての長 さの合計ではありません。

    プログラム内では、すべての制御レベル標識の制御レベル標識フィールドの長 さの合計は 256 桁以内でなければなりません。

  • レコード・タイプが同じ場合には、異なる制御レベル標識を割り当てた制御 フィールド内のレコードの位置がオーバーラップしていても差し支えありません (図 2 を参照)。 制御フィールドまたは突き合わせフィールドを必要とするレコード・タイプの場合に は、制御フィールドまたは突き合わせフィールドの合計の長さは 256 桁以内でなけれ ばなりません。 例えば、図 2 では、制御レベルに 15 桁が割り当てられて います。
  • 制御レベルの命令では、フィールド名は無視されます。 したがって、同じ制 御レベル標識を割り当てた異なるレコード・タイプのフィールドが、同じ名前であ っても差し支えありません。
  • 制御レベルは、決まった順序で記入する必要はありません。 L2 を L1 より前 に表すことができます。 より低いレベルの標識をすべて割り当ている必要もあり ません。
  • 1 つのファイル中の異なるレコード・タイプの制御フィールドが同数でない 場合には、不要な制御の切れ目が生ずることがあります。

図 3 は、このような不要な制御の切れ目を防ぐ方法例を示し ています。

図 1. 制御レベル標識 (2 つのレコード・タイプ)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
A* EMPLOYEE MASTER FILE -- EMPMSTL
A          R EMPREC                    PFILE(EMPMSTL)
A            EMPLNO         6
A            DEPT           3
A            DIVSON         1
A*
A*                 (ADDITIONAL FIELDS)
A*
A          R EMPTIM                    PFILE(EMPMSTP)
A            EMPLNO         6
A            DEPT           3
A            DIVSON         1
A*
A*                 (ADDITIONAL FIELDS)
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
 *
 *  In this example, control level indicators are defined for three
 *  fields.  The names of the control fields (DIVSON, DEPT, EMPLNO)
 *  give an indication of their relative importance.
 *  The division (DIVSON) is the most important group.
 *  It is given the highest control level indicator used (L3).
 *  The department (DEPT) ranks below the division;
 *  L2 is assigned to it.  The employee field (EMPLNO) has
 *  the lowest control level indicator (L1) assigned to it.
 *
IEMPREC        10
I                                          EMPLNO        L1
I                                          DIVSON        L3
I                                          DEPT          L2
 *
 *  The same control level indicators can be used for different record
 *  types.  However, the control fields having the same indicators must
 *  be the same length.  For records in an externally described file,
 *  the field attributes are defined in the external description.
 *
IEMPTIM        20
I                                          EMPLNO        L1
I                                          DEPT          L2
I                                          DIVSON        L3
図 2. オーバーラップする制御フィールド
この図は、オーバーラップする制御フィールドを示しています。
図 3. 不要な制御の切れ目を防ぐ方法
この図は、不要な制御の切れ目を防ぐ方法を示しています。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................
I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr....
ISALES         01
I                                  1    2  L2FLD         L2
I                                  3   15  NAME
IITEM          02
I                                  1    2  L2FLD         L2
I                                  3    5  L1FLD         L1
I                                  6    8  AMT
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
 *  Indicator 11 is set on when the salesman record is read.
 *
C   01              SETON                                        11
 *
 *  Indicator 11 is set off when the item record is read.
 *  This allows the normal L1 control break to occur.
 *
C   02              SETOFF                                       11
C   02AMT           ADD       L1TOT         L1TOT             5 0
CL1   L1TOT         ADD       L2TOT         L2TOT             5 0
CL2   L2TOT         ADD       LRTOT         LRTOT             5 0
 *
*...1....+....2....+....3....+....4....+....5....+....6....+....7...
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+...........................
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat
OPRINTER   D    01                  1  1
O                       L2FLD                5
O                       NAME                25
O          D    02                     1
O                       L1FLD               15
O                       AMT           Z     15
 *
 *  When the next item record causes an L1 control break, no total
 *  output is printed if indicator 11 is on.  Detail calculations
 *  are then processed for the item record.
 *
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+...........................
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat
O          T    L1N11               1
O                     L1TOT           ZB    25
O                                           27 '*'
O          T    L2                  1
O                     L2TOT           ZB    25
O                                           28 '**'
O          T    LR                  1
O                     LRTOT           ZB    25
REQTEXT

レコード・タイプが異なっていても、通常は同数の制御フィールドがあります 。しかし、アプリケーションによっては、一部のレコードに異なる数の制御フィールドが 必要な場合があります。

販売担当者レコードには、L2 の制御フィールドしかありません。 品目レコード には、L1 と L2 の両方の制御フィールドがあります。 通常の RPG IV のコーディングでは、販売担当者レコードに続く最初の品目レコードに よって不要な制御の切れ目が生じます。 これは、販売担当者レコードの直後の L1 の制御の切れ目によって認識され、その結果、販売担当者レコードの下の行に アスタリスクが印刷されます。
  • 数値制御フィールドは、ゾーン 10 進数形式で比較されます。 パック形式の数値入力フィールドの長さは次の式により決まります。
    d = 2n - 1
    ここで、d = フィールドの桁数、および n = 入力フィールドの長さです。 パック形式の数値フィールドの桁数は常に奇数です。したがって、パック形式の 数値フィールドをゾーン 10 進数値フィールドと比較する時には、ゾーン形式の フィールドの長さは奇数でなければなりません。
  • 制御の切れ目が起こっているかどうかを判別するために、小数点以下の桁数 を持つ数値制御フィールドが比較される場合には、常に小数点以下の桁数はない ものとして取り扱われます。 例えば、3.46 は 346 と等しいと見なされます。
  • フィールドを数値として指定する場合には、正の数値だけが制御の切れ目が 起こったかどうかを判別します。すなわち、フィールドは常に正であると見なされます。 例えば、-5 は +5 と等しいと見なされます。
  • 日付および時刻フィールドは、比較する前に *ISO 形式に変換されます。
  • 図形データは 16 進数値によって比較されます。