制御レベル標識に関する規則
制御レベル標識を割り当ている場合には、以下の点に留意してください。
- 制御フィールドは、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

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