循环语句( Loop Statements)
优质
小牛编辑
139浏览
2023-12-01
有些任务需要一遍又一遍地完成,比如读取文件的每个记录直到结束。 COBOL中使用的循环语句是 -
- 通过执行
- 执行直到
- 执行时间
- 执行变化
通过执行
Perform Thru用于通过给出序列中的第一个和最后一个段落名称来执行一系列段落。 执行最后一段后,将返回控件。
In-line Perform
PERFORM中的语句将被执行,直到达到END-PERFORM。
语法 (Syntax)
以下是在线执行的语法 -
PERFORM
DISPLAY 'HELLO WORLD'
END-PERFORM.
Out-of-line Perform
这里,语句在一个段落中执行,然后控件转移到其他段落或部分。
语法 (Syntax)
以下是外线表演的语法 -
PERFORM PARAGRAPH1 THRU PARAGRAPH2
Example
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'中,执行段落直到给定条件变为真。 'with test before'是默认条件,它表示在段落中的语句执行之前检查条件。
语法 (Syntax)
以下是执行的语法,直到 -
PERFORM A-PARA UNTIL COUNT=5
PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5
PERFORM A-PARA WITH TEST AFTER UNTIL COUNT=5
Example
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
执行时间
在'执行时间'中,段落将被执行指定的次数。
Syntax
以下是执行时间的语法 -
PERFORM A-PARA 5 TIMES.
Example
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
执行变化
在执行变化时,将执行段落,直到到达短语中的条件变为真。
语法 (Syntax)
以下是执行变化的语法 -
PERFORM A-PARA VARYING A FROM 1 BY 1 UNTIL A = 5.
Example
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 para-name.
有条件的去TO
GO TO para-1 para-2 para-3 DEPENDING ON x.
如果'x'等于1,则控制将转移到第一段; 如果'x'等于2,则控件将转移到第二段,依此类推。
Example
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