COBOL循环语句 - COBOL教程
有一些任务需要执行一遍又一遍,如读取文件中的每个记录,直到结束为止。以下是在COBOL中使用的循环语句:
- 执行直通
- 执行直到
- 执行时间
- 进行时变
执行直通
完成直通所使用的序列在给第一个和最后一段的名字来执行一系列段落。执行最后一段控件后会返回。
一行进行
里面的PERFORM语句将直到结束,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 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
执行时变
在执行不同的段会直到,直到短语变成真的条件来执行。
语法
以下是进行改变的语法:
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