制御レベル標識は、入力仕様書の 63 から 64 桁目の記入項目によって定義され、 ある入力フィールドを制御フィールドとして指定するものです。 これは、次に、演算および出力命令を条件付けするために使用することができま す。 有効な制御レベル標識は L1 から L9 です。
制御レベル標識は、ある入力フィールドを制御フィールドとして指定するもの です。 制御フィールドが読み取られると、制御フィールドのデータは、前のレコードか らの同じ制御フィールドのデータと比較されます。 データが異なっている場合に は、制御の切れ目が起こり、この制御フィールドに割り当てられた制御レベル標 識がオンに設定されます。 次に、制御レベル標識を使用して、制御フィールドに同じ 情報が入っているすべ てのレコードが読み取られた時にだけ処理されるように、命令を条件付けするこ とができます。 標識は、合計と最初の明細の両方の時点でオンになったままであ るため、合計印刷 (制御グループの最後のレコード) および明細印刷 (制御グル ープの最初のレコード) の条件付けにも使用することができます。 制御レベル標 識は、次のレコードが読み取られる前にオフに設定されます。
制御フィールドが入っている最初のレコードが 読み取られた後で、制御の切れ 目が起こる可能性があります。 このレコードの制御フィールドは、16 進数のゼロが入って いる記憶域内の区域と 比較されます。 2 つの異なるレコードからのフィールドが比較されているわけで はないので、このサイクルの合計演算および合計出力命令は回避されます。
制御レベル標識は、その重要度の順に、最低の L1 から最高の L9 までランク づけされます。 制御の切れ目の結果としてより高いレベルの標識がオンに設定 されると、それより低いレベルのすべての標識がオンに設定されます。 ただし、より 低いレベルの標識は、定義されている場合にしかプログラム中で使 用することができません。 例えば、制御の切れ目によって L8 がオンに設定された 場合には、L1 から L7 もオンに設定されます。 LR (最終レコード) 標識は、入力ファイルがファイル の終わりになった時にオンに設定されます。 LR は最高レベルの標識と見なされ、 L1 から L9 も強制的にオンに設定されます。
制御レベル標識は、レコード識別標識または結果の標識として定義することも できます。 この方法で制御レベル標識を使用した場合には、高いレベルの標識が オンに設定されても、それより低いレベルの標識の状況は変更されません。 例えば、L3 が結果の標識として使用されている場合には、L3 がオンに設定さ れても、L2 および L1 の状況は変わりません。
他のフィールドとの関係での制御フィールドの重要度に よって、制御レベル標 識を割り当ている方法が決まります。 例えば、小計を必要とするデータには、最 終合計を必要とするデータより低い制御レベル標識が必要です。 各部門の従業員 をグループ分けする場合に、部門番号が入っている制御フィールドには、従業員 番号が入っている制御フィールドより高い制御レベル標識が必要です (図 11 を参照)。
制御レベル標識を割り当ている場合には、以下の点に留意してください。
分割制御フィールドの場合の制御レベル標識フィールドの長さは、ある制御レ ベル標識と関連した、レコード内のすべてのフィールドの長さの合計です。 L2 が 長さ 12 バイト、2 バイト、および 4 バイトの 3 つのフィールドから構成される 分割制御フィールドを持っている場合には、L2 の制御レベル標識フィールドの長 さは 18 桁になります。
複数のレコードが同じ制御レベル標識を使用する場合、制御レベル標識フィー ルドの長さは、1 つのレコードだけの長さです。それらのレコードのすべての長 さの合計ではありません。
プログラム内では、すべての制御レベル標識の制御レベル標識フィールドの長 さの合計は 256 桁以内でなければなりません。
図 13 は、このような不要な制御の切れ目を防ぐ方法例を示し ています。
*...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
*...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 の制御の切れ目によって認識され、その結果、販売担当者レコードの下の行に アスタリスクが印刷されます。
d = 2n - 1ここで、d = フィールドの桁数、および n = 入力フィールドの長さです。 パック形式の数値フィールドの桁数は常に奇数です。したがって、パック形式の 数値フィールドをゾーン 10 進数値フィールドと比較する時には、ゾーン形式の フィールドの長さは奇数でなければなりません。
入力レコード中の複数のフィールドに同じ制御レベル標識を割り当ていると、分 割制御フィールドが形成されます。 プログラム記述ファイルの場合には、同じ制 御レベル標識を持つフィールドは入力仕様書に指定された順序でプログラムによ って結合され、単一の制御フィールドとして取り扱われます (図 14 を参照)。 最初に定義されたフィールドは、制御フィールドの高位 (左端) 位置に入れら れ、最後に定義されたフィールドは、制御フィールドの低位 (右端) 位置に入 れられます。
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr.... IMASTER 01 I 28 31 CUSNO L4 I 15 20 ACCTNO L4 I 50 52 REGNO L4
外部記述ファイルの場合には、同じ制御レベル標識を持つフィールドは、その フィールドが入力仕様書に指定された順序ではなく、データ記述仕様 (DDS) に記 述されている順序で結合されます。 例えば、DDS に次のフィールドが次の順序で指定されているとします。
また、これらのフィールドが、入力仕様書で次の順序により同じ制御レベル標 識を持つように指定されているとします。
フィールドは EMPNO DPTNO REGNO の順序で結合されて分割制御フィールドが構 成されます。
分割制御フィールドについては、次のような特別な規則があります。
図 15 は、これらの規則の例を示しています。
*...1....+....2....+....3....+....4....+....5....+....6....+....7... IFilename++SqNORiPos1+NCCPos2+NCCPos3+NCC................................ I........................Fmt+SPFrom+To+++DcField+++++++++L1M1FrPlMnZr.... IDISK BC 91 95 C1 I OR 92 95 C2 I OR 93 95 C3 I * All portions of the split control field must be assigned the same * control level indicator and all must have the same field record * relation entry. I 1 5 FLD1A L1 I 46 50 FLD1B L1 I 11 13 FLDA L2 I 51 60 FLD2A L3 I 31 40 FLD2B L3 I 71 75 FLD3A L4 92 I 26 27 FLD3B L4 92 I 41 45 FLD3C L4 92 I 61 70 FLDB 92 I 21 25 FLDC 92 I 6 10 FLD3D L4 93 I 14 20 FLD3E L4 93
95 桁目の 1 で識別されるレコードには、次の 2 つの分割制御フィールドがあ ります。
95 桁目の '2' で識別されるレコードには、次の 3 つの分割制御フィールドがあ ります。
95 桁目の '3' で識別される 3 番目のレコード・タイプにも、次の 3 つの分割制 御フィールドがあります。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.