ILE COBOL 解説書

VARYING 句を指定する PERFORM

VARYING 句は、1 つまたは複数の ID または指標名の値を所定の規則に従って増大または減少させます。 (VARYING 句の規則を参照してください。)

VARYING 句を指定した PERFORM ステートメント (形式 4) では、7 次元テーブル全体を逐次検索できます。

PERFORM ステートメント - 形式 4
 
>>-PERFORM------------------------------------------------------>
 
>--+-プロシージャー名-1--+---------------------------------+--| 句 3 |-+-><
   |                     '-+-THROUGH-+--プロシージャー名-2-'           |
   |                       '-THRU----'                                 |
   '-| 句 3 |--命令ステートメント-1--END-PERFORM-----------------------'
 
句 3:
 
|--+----------------------------+--VARYING--+-ID-2-----+-------->
   '-+------+--TEST--+-BEFORE-+-'           '-指標名-1-'
     '-WITH-'        '-AFTER--'
 
>--FROM--+-ID-3-------+--BY--+-ID-4-------+--UNTIL--条件-1------>
         +-指標名-2---+      '-リテラル-2-'
         '-リテラル-1-'
 
>--+--------------+---------------------------------------------|
   | .----------. |
   | V          | |
   '---| 句 4 |-+-'
 
句 4:
 
|--AFTER--+-ID-5-----+--FROM--+-ID-6-------+--BY---------------->
          '-指標名-3-'        +-指標名-4---+
                              '-リテラル-3-'
 
>--+-ID-7-------+--UNTIL--条件-2--------------------------------|
   '-リテラル-4-'
 
 

関連情報

条件-1、条件-2
条件式で記述されている条件を指定できます。 PERFORM ステートメントの開始時に条件が真である場合には、指定されたプロシージャーは実行されません。

UNTIL 句内に指定された条件が満たされると、PERFORM ステートメントに続く次の実行可能ステートメントに制御権が渡されます。

条件-1 または条件-2 に指定されている任意のオペランドが、添え字付きであるか、参照変更されているか、または関数 ID である場合、 その添え字、参照修飾子、または関数は、条件がテストされるたびに評価されます。

+----------------------------------IBM 拡張----------------------------------+

浮動小数点データ項目および浮動小数点リテラルは、数字データ項目または数字リテラルが指定できるところではどこでも使用できます。

+------------------------------End of IBM 拡張-------------------------------+

TEST BEFORE が指定されると、指定されたすべての条件が最初の実行前にテストされます。 実行すべきステートメントは、指定されたすべてのテストが失敗した場合にだけ実行されます。 TEST AFTER が指定されると、実行すべきステートメントは、条件がテストされる前に少なくとも 1 回実行されます。 条件-1 に指定されたオペランドに関連する添え字付けは、条件がテストされるたびに評価されます。

TEST BEFORE 句も TEST AFTER 句も指定しない場合には、TEST BEFORE 句が想定されます。

ID の変更

オペランドを増大または減少させる方法は、指定される変数の数によって異なります。 以下の説明では、ID-n という表現を使用する場合、 指標名-n にも等しく当てはまります (ただし、ID-n が BY 句の対象である場合を除きます)。

ID-2 あるいは ID-5 が添え字付けされている場合、添え字は、ID によって参照されるデータ項目の内容が設定または増補されるたびに 評価されます。 ID-3、ID-4、ID-6、または ID-7 が添え字付けされている場合、 添え字は、ID によって参照されるデータ項目の内容が設定または増補操作に使用されるたびに評価されます。

1 つの ID の変更

このセクションでは、PERFORM ステートメントを使用して 1 つの ID を変更する方法を記述するを示します。

PERFORM procedure-name-1 THROUGH procedure-name-2
       VARYING identifier-2 FROM identifier-3
             BY identifier-4 UNTIL condition-1

  1. ID-2 が、それの開始値である ID-3 (またはリテラル-1) と等しく設定されます。
  2. 条件-1 が次のように評価されます。
    1. 条件-1 が偽である場合には、ステップ 3 〜 5 が実行されます。
    2. 条件-1 が真である場合には、制御権が PERFORM ステートメントに続くステートメントに直接渡されます。
  3. プロシージャー名-1 からプロシージャー名-2 (指定されている場合) までのすべてが 1 回実行されます。
  4. ID-2 が ID-4 (またはリテラル-2) だけ増やされ、条件-1 が再び評価されます。
  5. 条件-1 が真になるまで、ステップ 2 からステップ 4 が繰り返されます。

PERFORM ステートメントの実行終了時には、 ID-2 は、最後に使用された設定値を増加 / 減少値分超える値をもちます (ただし、PERFORM ステートメントの実行開始時に条件-1 が真であった場合には、 ID-2 に ID-3 の現行値が入ります)。

図 16 は、TEST BEFORE 句を使用して ID を変更する場合の PERFORM ステートメントの論理を示したものです。 図 17 は、TEST AFTER 句を使用して ID を変更する場合の PERFORM ステートメントの論理を示したものです。

図 16. TEST BEFORE を使用して 1 つの ID を変更する場合

REQTEXT

図 17. TEST AFTER を使用して 1 つの ID を変更する場合

REQTEXT

2 つの ID の変更

このセクションでは、PERFORM ステートメントを使用して 2 つの ID を変更する方法を記述するを示します。

PERFORM procedure-name-1 THROUGH procedure-name-2
      VARYING identifier-2 FROM identifier-3
            BY identifier-4 UNTIL condition-1
         AFTER identifier-5 FROM identifier-6
            BY identifier-7 UNTIL condition-2

  1. ID-2ID-5 が、 それらの初期値である ID-3 と ID-6 にそれぞれ設定されます。
  2. 条件-1 が次のように評価されます。
    1. 条件-1 が偽である場合には、ステップ 3 〜 7 が実行されます。
    2. 条件-1 が真である場合には、制御権が PERFORM ステートメントに続くステートメントに直接渡されます。
  3. 条件-2 が次のように評価されます。
    1. 条件-2 が偽である場合には、ステップ 4 〜 6 が実行されます。
    2. 条件-2 が真である場合には、ID-2 が ID-4 だけ増やされ、ID-5 が ID-6 の現行値に設定され、ステップ 2 が繰り返されます。
  4. プロシージャー名-1 からプロシージャー名-2 (指定されている場合) までのすべてのものが 1 回実行されます。
  5. ID-5 が ID-7 だけ増やされます。
  6. 条件-2 が真になるまで、ステップ 3 からステップ 5 が繰り返されます。
  7. 条件-1 が真になるまで、ステップ 2 からステップ 6 が繰り返されます。

PERFORM ステートメントの実行終了時には、次のようになります。

図 18 は、TEST BEFORE 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。 図 19 は、TEST AFTER 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。

図 18. TEST BEFORE を使用して 2 つの ID を変更する場合

REQTEXT

上の図では、ID-5 と ID-2 が関係をもたないことを想定してします。 一方が他方に依存している場合 (たとえば添え字を介して)、結果は予測できますが、一般的に望ましいものではありません。

図 19. TEST AFTER を使用して 2 つの ID を変更する場合

REQTEXT

3 つの ID の変更

このセクションでは、PERFORM ステートメントを使用して 3 つの ID を変更する方法を記述するを示します。

PERFORM procedure-name-1 THROUGH procedure-name-2
      VARYING identifier-2 FROM identifier-3
            BY identifier-4 UNTIL condition-1
          AFTER identifier-5 FROM identifier-6
            BY identifier-7 UNTIL condition-2
          AFTER identifier-8 FROM identifier-9
            BY identifier-10 UNTIL condition-3

処理は、次の点を除いては 2 つの ID を変更する場合と同じです。 つまり、ID-5 が ID-7 だけ増やされるたびに ID-8 が完全なサイクルを通過し、 次に ID-2 が変更されるたびに ID-5 が完全なサイクルを通過します。

PERFORM ステートメントの実行終了時には、次のようになります。

図 20 は、3 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。

図 20. 形式 4 の PERFORM ステートメントの論理 - 3 つの ID を変更する場合

REQTEXT

上の図では、ID-5 と ID-2 が関係をもたないことを想定してします。 一方が他方に依存している場合 (たとえば添え字を介して)、結果は予測できますが、一般的に望ましいものではありません。

上の図では、さらに、ID-8 と ID-5 が関係をもたないことも想定しています。 一方が他方に依存している場合 (たとえば添え字を介して)、結果は予測できますが、一般的に望ましいものではありません。

4 つ以上の ID の変更

VARYING 句を使用するときは、最高 4 つまでの AFTER 句を追加することによって、上記の例を合計 6 個の AFTER 句を持つように拡張できます。

このセクションでは、PERFORM ステートメントを使用して 4 つ以上の ID を変更する方法を記述するを示します。

VARYING 句の規則

指定される変数の数に関係なく、次の規則が適用されます。

  1. VARYING/AFTER 句の中で指標名を指定する場合には、次のようになります。
    1. 指標名は、INDEXED BY 句の規則に従って初期設定され、増加または減少されます。 (SET ステートメントも参照してください。)
    2. 関連する FROM 句では、ID は整数として記述されているものでなければならず、正の値をもたなければなりません。 リテラルは正の値をもたなければなりません。
    3. 関連する BY 句では、ID は整数として記述されているものでなければなりません。 リテラルはゼロ以外の整数でなければなりません。
  2. FROM 句の中で指標名を指定する場合には、次のようになります。
    1. 関連する VARYING/AFTER 句では、ID は整数として記述されているものでなければなりません。 これは、SET ステートメントのところで説明されているように初期設定されます。
    2. 関連する BY 句では、ID は整数として記述されているものでなければならず、ゼロ以外の値をもたなければなりません。 リテラルはゼロ以外の整数でなければなりません。
  3. BY 句では、ID およびリテラルはゼロ以外の値をもたなければなりません。
  4. 実行時に VARYING、FROM、および BY 句における ID または指標名、あるいはその両方の値を変更すると、 プロシージャーの実行回数が変わります。
  5. オペランドを増加または減少させる方法は、指定する変数の数によって異なります。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]