FOR

FOR operand1

[:]=
EQ
FROM

operand2
(arithmetic-expression)

 
 

TO
THRU

operand3
(arithmetic-expression)

 
 
   

STEP  

operand4
(arithmetic-expression)

    statement
END-FOR   (structured mode only)
LOOP   (reporting mode only)

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:REPEAT | ESCAPE

関連機能グループ:ループ実行


関数

FOR ステートメントは、処理ループを開始し、ループの処理回数を制御するために使用します。

整合性チェック

FOR ループに入る前に、オペランドの値に矛盾がないか(operand2operand4 を繰り返し加算し、operand3 の値以上になるか)を確かめます。値に矛盾があれば、FOR ループには入りません(STEP 値がゼロの場合を除き、エラーメッセージは出力されません)。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S           N P I F              
operand2 C S     N     N P I F               ×
arithmetic-expression   S           N P I F               × ×
operand3 C S     N     N P I F               ×
operand4 C S     N     N P I F               ×

構文要素の説明:

構文要素 説明
operand1
ループ制御変数(operand1)および初期設定(operand2):

operand1 は、処理ループの実行回数を制御します。データベースフィールドまたはユーザー定義変数が使用できます。

キーワード FROM の後の指定値(operand2)が、最初に処理ループに入る前に制御変数フィールドに割り当てられます。制御変数フィールドの値は、ループに入るたびにキーワード STEP の後の指定値(operand4)ずつ増えていきます(STEP 値が負数であれば減っていきます)。

処理ループ実行中にループ制御変数を参照できます。ループ制御変数には、その現在値が含まれます。

注意:
キーワード [:]=EQ または FROM は省略できます。

operand2
operand3
TO 値:

処理ループは、operand1operand3 の値よりも大きくなると(STEP 値が負であれば小さくなると)終了します。

注意:
キーワード TO または TRU は省略できます。

STEP operand4
STEP 値:

STEP 値には正でも負でも指定できます。STEP 値を省略すると、+1 の増加とみなされます。

ループに入るときに STEP 値の符号によって、"より小さい" または "より大きい" の比較演算が行われます。

注意:

  1. operand4 をゼロにすることはできません。
  2. キーワード STEP は省略できます。
(arithmetic-expression)
算術演算式:

operand2operand3、または operand4 の代わりに算術演算を指定できます。

注意:

  1. 算術式はカッコで囲む必要があります。
  2. 前記のキーワードは省略できません。

算術式の詳細については、COMPUTE ステートメントの説明にある arithmetic-expression を参照してください。

END-FOR
End of FOR ステートメント:

ストラクチャードモードでは、FOR ステートメントを終了するには、Natural の予約語 END-FOR を使用する必要があります。

レポーティングモードでは、Natural のステートメント LOOP を使用して FOR ステートメントを終了します。

LOOP

** Example 'FOREX1S': FOR (structured mode)                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #INDEX (I1)                                                           
1 #ROOT  (N2.7)                                                         
END-DEFINE                                                              
*                                                                       
FOR #INDEX 1 TO 5                                                       
  COMPUTE #ROOT = SQRT (#INDEX)                                         
  WRITE NOTITLE '=' #INDEX 3X '=' #ROOT                                 
END-FOR                                                                 
*                                                                       
SKIP 1                                                                  
FOR #INDEX 1 TO 5 STEP 2                                                
  COMPUTE #ROOT = SQRT (#INDEX)                                         
  WRITE '=' #INDEX 3X '=' #ROOT                                         
END-FOR                                                                 
*                                                                       
END

プログラム FOREX1S の出力:

#INDEX:    1   #ROOT:   1.0000000
#INDEX:    2   #ROOT:   1.4142135
#INDEX:    3   #ROOT:   1.7320508
#INDEX:    4   #ROOT:   2.0000000
#INDEX:    5   #ROOT:   2.2360679
                                 
#INDEX:    1   #ROOT:   1.0000000
#INDEX:    3   #ROOT:   1.7320508
#INDEX:    5   #ROOT:   2.2360679

レポーティングモードの例については、次のプログラムを参照してください:FOREX1R