PERFORM UNTILによる繰り返し

繰り返し処理を行いたい場合は、PERFORM文を使用します。

下記はPERFORM UNTILにより繰り返しを行うサンプルソースです。


000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-09.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-COUNTER                   PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     MOVE  1                      TO  WRK-COUNTER.
000130     PERFORM  UNTIL  WRK-COUNTER  >  10
000140         DISPLAY  "WRK-COUNTERは " WRK-COUNTER   UPON  CONSOLE
000150         ADD  1                   TO  WRK-COUNTER
000160     END-PERFORM.
000170     STOP RUN.

UNTILに指定した「WRK-COUNTERが10より大きくなるまで」という条件が成立するまで、END-PERFORMまでの範囲に記述した命令文が繰り返し実行されます。


PERFORM UNTIL 書式
PERFORM [WITH TEST 判定のタイミング] UNTIL 論理式
      :
    命令文1
    命令文2
      :
END-PERFORM.

※EXIT PERFORM文を実行すると、そのタイミングで繰り返し処理から抜ける。
※PERFORMからEND-PERFORMまでの間に記述する命令文にはピリオド不要。

判定のタイミング
BEFOREPERFORMを実行する前に論理式の条件を判定する(前判定型)
C言語でのwhile文に相当
AFTERPERFORMを実行した後に論理式の条件を判定する(後判定型)
C言語でのdo-while文に相当
※WITH TESTを省略した場合、BEFOREが指定されたものとみなされる。

PERFORM文では、上記サンプルのようにUNTILで指定した条件になるまで繰り返す方法以外に、カウンタを用いた方法もあります。