REPEAT

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

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

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


関数

REPEAT ステートメントは、処理ループを開始するために使用します。

プログラミングガイド』の「ループ処理」も参照してください。

構文説明

このステートメントには、2 つの異なる構造が可能です。

  • 構文 1 を使用すると、ステートメントは 1 回または複数回実行されます。

  • 構文 2 を使用すると、ステートメントは 0 回または複数回実行されます。

論理条件の指定位置(ループの最初または最後)によって評価のタイミングが決まります。

論理条件の詳細については、「論理条件基準」(『プログラミングガイド』)を参照してください。

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

構文 1:

REPEAT            
statement

UNTIL

logical-condition

WHILE
END-REPEAT ストラクチャードモードのみ
LOOP レポーティングモードのみ

構文 2:

REPEAT  
 

UNTIL

logical-condition

statement
WHILE
 
END-REPEAT ストラクチャードモードのみ  
LOOP レポーティングモードのみ  

構文要素の説明:

構文要素 説明
UNTIL
UNTIL オプション:

論理条件が真になるまで、処理ループは継続します。

WHILE
WHILE オプション:

論理条件が真である限り、処理ループは継続します。

logical-condition
論理条件:

論理条件を指定すると、その条件によりいつループ実行を終了するかが決まります。

論理条件を指定しない場合、ループ内で ESCAPESTOP、または TERMINATE ステートメントを指定し、ループから出る必要があります。

logical-condition の構文については、『プログラミングガイド』の「論理条件基準」を参照してください。

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

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

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

LOOP

例 1 - REPEAT

** Example 'RPTEX1S': REPEAT (structured mode)                          
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
*                                                                       
1 #PERS-NR (A8)                                                         
END-DEFINE                                                              
*                                                                       
REPEAT                                                            
  INPUT 'ENTER A PERSONNEL NUMBER:' #PERS-NR                            
  IF #PERS-NR = ' '                                                     
    ESCAPE BOTTOM                                                       
  END-IF                                                                
  /*                                                                    
  FIND EMPLOY-VIEW WITH PERSONNEL-ID = #PERS-NR                         
    IF NO RECORD FOUND                                                  
      REINPUT 'NO RECORD FOUND'                                         
    END-NOREC           
    DISPLAY NOTITLE NAME
  END-FIND              
END-REPEAT          
*                       
END

プログラム RPTEX1S の出力:

ENTER A PERSONNEL NUMBER: 11500304

人事番号を入力および確定した後:

        NAME        
--------------------
                    
KLUGE

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

例 2 - WHILE および UNTIL オプションの使用

** Example 'RPTEX2S': REPEAT (with WHILE and UNTIL option)              
************************************************************************
DEFINE DATA LOCAL                                                       
1 #X (I1) INIT <0>                                                      
1 #Y (I1) INIT <0>                                                      
END-DEFINE                                                              
*                                                                       
REPEAT WHILE #X <= 5                                              
  ADD 1 TO #X                                                           
  WRITE NOTITLE '=' #X                                                  
END-REPEAT                                                           
*                                                                       
SKIP 3                                                                  
REPEAT                                                             
  ADD 1 TO #Y                                                           
  WRITE '=' #Y
  UNTIL #Y = 6                                                          
END-REPEAT                                                             
*                                                                       
END

プログラム RPTEX2S の出力:

#X:    1 
#X:    2 
#X:    3 
#X:    4 
#X:    5 
#X:    6 
         
         
         
#Y:    1 
#Y:    2 
#Y:    3 
#Y:    4 
#Y:    5 
#Y:    6

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