COBOL - 循环语句

有些任务需要一遍又一遍地完成,比如读取文件的每个记录直到结束. COBOL中使用的循环语句是 :

  • 执行直通
  • 执行直到
  • 执行时间
  • 执行变化

执行直通

Perform Thru用于通过给出序列中的第一个和最后一个段落名称来执行一系列段落.执行最后一段后,控制权将返回.

在线执行

PERFORM中的语句将被执行,直到END-PERFORM为止到达.

语法

以下是内联执行和减号的语法;

PERFORM 
   disPLAY 'HELLO WORLD'
END-PERFORM.

外线执行

这里,语句在一个段落中执行,然后转移控件到其他段落或部分.

语法

以下是Out-of-line perform&minus的语法;

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

执行直到

在'执行直到'中,执行一个段落,直到给定条件变为真. 'with before 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 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 para-name.

有条件转到

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