COBOL 循环语句
有一些任务需要一遍一遍地完成,就像读一个文件的每一个记录,直到它结束。COBOL中使用的循环语句是:
- Perform Thru
- Perform Until
- Perform Times
- Perform Varying
Perform Thru
Perform Thru用于执行一系列段落,通过给序列中的第一和最后一段命名。执行最后一段后,控制返回。
内联Perform
PERFORM内的语句将被执行,直到到达END-PERFORM。
语法
下面是在内联perform的语法:
PERFORM DISPLAY 'HELLO WORLD'END-PERFORM.
外联Perform
在这里,一个语句在段落中执行,然后将控制转移到其他段落或节。
语法
以下是外联Perform的语法:
PERFORM PARAGRAPH1 THRU PARAGRAPH2
例
IDENTIFICATION DIVISION.PROGRAM-ID. ANDRECC.PROCEDURE DIVISION.HAX-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'.
JCL执行上述COBOL程序。
//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
Perform Until
在Perform Until中,一个段落执行直到给定的条件为true。“WITH TEST BEFORE”是默认条件,表示条件在执行段落中的语句之前检查。
语法
以下是perform until的语法:
PERFORM A-PARA UNTIL COUNT=5PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5PERFORM 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 Times
在“perform times”中,一个段落将被执行指定的次数。
语法
以下是perform times的语法:
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
Perform Varying
在perform varying中,一个段落将被执行直到UNTIL短语中的条件为true。
语法
以下是perform varying的语法:
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=5STOP 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,则控制将传输到第二段,以此类推。
例
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.
JCL执行上述COBOL程序:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO
当你编译和执行上面的程序,会产生以下结果:
IN A-PARA
IN B-PARA
IN D-PARA