Cobol-loop-statements
COBOL-ループステートメント
ファイルの各レコードを最後まで読み込むなど、何度も何度も実行する必要があるタスクがあります。 COBOLで使用されるループ文は次のとおりです-
- 実行する
- まで実行
- 時間を実行
- 変化させる
実行する
Perform Thruは、シーケンスの最初と最後の段落名を指定して一連の段落を実行するために使用されます。 最後の段落を実行した後、コントロールが返されます。
インライン実行
PERFORM内のステートメントは、END-PERFORMに達するまで実行されます。
構文
以下は、インライン実行の構文です-
PERFORM
DISPLAY 'HELLO WORLD'
END-PERFORM.
アウトラインの実行
ここでは、文が1つの段落で実行され、その後、制御は他の段落またはセクションに移されます。
構文
以下は、行外実行の構文です-
PERFORM PARAGRAPH1 THRU PARAGRAPH2
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
A-PARA.
PERFORM DISPLAY 'IN A-PARA'
END-PERFORM.
PERFORM C-PARA THRU E-PARA.
B-PARA.
DISPLAY 'IN B-PARA'.
STOP RUN.
C-PARA.
DISPLAY 'IN C-PARA'.
D-PARA.
DISPLAY 'IN D-PARA'.
E-PARA.
DISPLAY 'IN E-PARA'.
上記のCOBOLプログラムを実行する JCL 。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
IN A-PARA
IN C-PARA
IN D-PARA
IN E-PARA
IN B-PARA
まで実行
「実行まで」では、指定された条件が満たされるまで段落が実行されます。 「with before before」はデフォルトの条件であり、段落内のステートメントの実行前に条件がチェックされることを示します。
構文
以下は、perform untilの構文です-
PERFORM A-PARA UNTIL COUNT=5
PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5
PERFORM A-PARA WITH TEST AFTER UNTIL COUNT=5
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-CNT PIC 9(1) VALUE 0.
PROCEDURE DIVISION.
A-PARA.
PERFORM B-PARA WITH TEST AFTER UNTIL WS-CNT>3.
STOP RUN.
B-PARA.
DISPLAY 'WS-CNT : 'WS-CNT.
ADD 1 TO WS-CNT.
*JCL* 上記のCOBOLプログラムを実行します-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
WS-CNT : 0
WS-CNT : 1
WS-CNT : 2
WS-CNT : 3
時間を実行
「実行時間」では、指定した回数だけ段落が実行されます。
構文
実行時間の構文は次のとおりです-
PERFORM A-PARA 5 TIMES.
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
A-PARA.
PERFORM B-PARA 3 TIMES.
STOP RUN.
B-PARA.
DISPLAY 'IN B-PARA'.
*JCL* 上記のCOBOLプログラムを実行します-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
IN B-PARA
IN B-PARA
IN B-PARA
変化させる
可変実行では、Until句の条件がtrueになるまで段落が実行されます。
構文
以下は、可変実行の構文です-
PERFORM A-PARA VARYING A FROM 1 BY 1 UNTIL A = 5.
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.
PROCEDURE DIVISION.
A-PARA.
PERFORM B-PARA VARYING WS-A FROM 1 BY 1 UNTIL WS-A=5
STOP RUN.
B-PARA.
DISPLAY 'IN B-PARA ' WS-A.
*JCL* 上記のCOBOLプログラムを実行します-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
IN B-PARA 1
IN B-PARA 2
IN B-PARA 3
IN B-PARA 4
GO TOステートメント
GO TOステートメントは、プログラムの実行フローを変更するために使用されます。 GO TOステートメントでは、転送は順方向にのみ行われます。 段落を終了するために使用されます。 使用されるGO TOステートメントの種類は次のとおりです-
無条件のGO TO
GO TO para-name.
条件付きGO TO
GO TO para-1 para-2 para-3 DEPENDING ON x.
「x」が1に等しい場合、コントロールは最初の段落に転送されます。 「x」が2に等しい場合、コントロールは2番目の段落に移され、以下同様に続きます。
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 2.
PROCEDURE DIVISION.
A-PARA.
DISPLAY 'IN A-PARA'
GO TO B-PARA.
B-PARA.
DISPLAY 'IN B-PARA '.
GO TO C-PARA D-PARA DEPENDING ON WS-A.
C-PARA.
DISPLAY 'IN C-PARA '.
D-PARA.
DISPLAY 'IN D-PARA '.
STOP RUN.
上記のCOBOLプログラムを実行する JCL :
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます。
IN A-PARA
IN B-PARA
IN D-PARA