COBOL - 循环语句



有一些任务需要反复执行,例如读取文件的每个记录直到文件末尾。COBOL 中使用的循环语句如下:

  • 执行直到
  • 执行直到
  • 执行次数
  • 执行变化

执行直到

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'.

执行上述 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

执行直到

在“perform until”中,段落将执行到给定条件为真为止。“With test 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.

执行上述 COBOL 程序的JCL

//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'.

执行上述 COBOL 程序的JCL

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

编译并执行上述程序后,将产生以下结果:

IN B-PARA
IN B-PARA
IN B-PARA

执行变化

在 perform varying 中,段落将执行到 Until 子句中的条件为真为止。

语法

以下是 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.

执行上述 COBOL 程序的JCL

//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.

执行上述 COBOL 程序的JCL

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

编译并执行上述程序后,将产生以下结果

IN A-PARA
IN B-PARA 
IN D-PARA 
广告