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 
廣告