COBOL - 循环语句
有些任务需要一遍又一遍地完成,例如读取文件的每条记录直到结束。 COBOL 中使用的循环语句是 −
- Perform Thru
- Perform Until
- Perform Times
- Perform Varying
Perform Thru
Perform Thru 用于通过给出序列中第一个和最后一个段落名称来执行一系列段落。 执行完最后一段后,控制权返回。
在线执行
将执行 PERFORM 内的语句,直到到达 END-PERFORM。
语法
以下是内联执行的语法 −
PERFORM DISPLAY 'HELLO WORLD' END-PERFORM.
越线执行
这里,在一个段落中执行一条语句,然后将控制权转移到其他段落或部分。
语法
以下是越线执行执行的语法 −
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'.
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'中,执行一个段落,直到给定的条件变为真。 "With test before"是默认条件,表示在执行段落中的语句之前检查条件。
语法
以下是执行直到的语法 −
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 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 中,将执行一个段落,直到直到短语中的条件变为真为止。
语法
以下是执行变化的语法 −
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,则控制权将转移到第二段,依此类推。
示例
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