- COBOL 教程
- COBOL - 首頁
- COBOL - 概述
- COBOL - 環境設定
- COBOL - 程式結構
- COBOL - 基本語法
- COBOL - 資料型別
- COBOL - 基本動詞
- COBOL - 資料佈局
- COBOL - 條件語句
- COBOL - 迴圈語句
- COBOL - 字串處理
- COBOL - 表格處理
- COBOL - 檔案處理
- COBOL - 檔案組織
- COBOL - 檔案訪問模式
- COBOL - 檔案處理動詞
- COBOL - 子程式
- COBOL - 內部排序
- COBOL - 資料庫介面
- COBOL 有用資源
- COBOL - 問題與解答
- COBOL - 快速指南
- COBOL - 有用資源
COBOL - 條件語句
條件語句用於根據程式設計師指定的某些條件更改執行流程。條件語句始終計算為真或假。條件用於 IF、Evaluate 和 Perform 語句中。不同型別的條件如下:
- IF 條件語句
- 關係條件
- 符號條件
- 類別條件
- 條件名條件
- 否定條件
- 組合條件
IF 條件語句
IF 語句檢查條件。如果條件為真,則執行 IF 程式碼塊;如果條件為假,則執行 ELSE 程式碼塊。
END-IF 用於結束 IF 程式碼塊。要結束 IF 程式碼塊,可以使用句點代替 END-IF。但是,對於多個 IF 程式碼塊,始終建議使用 END-IF。
巢狀 IF - IF 程式碼塊出現在另一個 IF 程式碼塊內。巢狀 IF 語句的深度沒有限制。
語法
以下是 IF 條件語句的語法:
IF [condition] THEN [COBOL statements] ELSE [COBOL statements] END-IF.
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
01 WS-NUM3 PIC 9(5).
01 WS-NUM4 PIC 9(6).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1 WS-NUM3.
MOVE 15 TO WS-NUM2 WS-NUM4.
IF WS-NUM1 > WS-NUM2 THEN
DISPLAY 'IN LOOP 1 - IF BLOCK'
IF WS-NUM3 = WS-NUM4 THEN
DISPLAY 'IN LOOP 2 - IF BLOCK'
ELSE
DISPLAY 'IN LOOP 2 - ELSE BLOCK'
END-IF
ELSE
DISPLAY 'IN LOOP 1 - ELSE BLOCK'
END-IF.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
IN LOOP 1 - IF BLOCK IN LOOP 2 - ELSE BLOCK
關係條件
關係條件比較兩個運算元,這兩個運算元可以是識別符號、文字或算術表示式。無論大小和用法子句如何,都會對數值欄位進行代數比較。
對於非數值運算元
如果比較兩個大小相等的非數值運算元,則從左到右比較字元,直到到達末尾。包含更多字元的運算元被宣告為更大。
如果比較兩個大小不相等的非數值運算元,則在較短的資料項的末尾附加空格,直到運算元的大小相等,然後根據上一要點中提到的規則進行比較。
語法
以下是關係條件語句的語法:
[Data Name/Arithmetic Operation] [IS] [NOT] [Equal to (=),Greater than (>), Less than (<), Greater than or Equal (>=), Less than or equal (<=) ] [Data Name/Arithmetic Operation]
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(9).
01 WS-NUM2 PIC 9(9).
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 25 TO WS-NUM1.
MOVE 15 TO WS-NUM2.
IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
ELSE
DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
END-IF.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
WS-NUM1 IS GREATER THAN WS-NUM2
符號條件
符號條件用於檢查數值運算元的符號。它確定給定的數值是否大於、小於或等於零。
語法
以下是符號條件語句的語法:
[Data Name/Arithmetic Operation] [IS] [NOT] [Positive, Negative or Zero] [Data Name/Arithmetic Operation]
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC S9(9) VALUE -1234.
01 WS-NUM2 PIC S9(9) VALUE 123456.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS POSITIVE THEN
DISPLAY 'WS-NUM1 IS POSITIVE'.
IF WS-NUM1 IS NEGATIVE THEN
DISPLAY 'WS-NUM1 IS NEGATIVE'.
IF WS-NUM1 IS ZERO THEN
DISPLAY 'WS-NUM1 IS ZERO'.
IF WS-NUM2 IS POSITIVE THEN
DISPLAY 'WS-NUM2 IS POSITIVE'.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
WS-NUM1 IS NEGATIVE WS-NUM2 IS POSITIVE
類別條件
類別條件用於檢查運算元是否僅包含字母或數字資料。空格被視為 ALPHABETIC、ALPHABETIC-LOWER 和 ALPHABETIC-UPPER 中的一部分。
語法
以下是類別條件語句的語法:
[Data Name/Arithmetic Operation>] [IS] [NOT] [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER] [Data Name/Arithmetic Operation]
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
01 WS-NUM2 PIC 9(9) VALUE 123456789.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS ALPHABETIC THEN
DISPLAY 'WS-NUM1 IS ALPHABETIC'.
IF WS-NUM1 IS NUMERIC THEN
DISPLAY 'WS-NUM1 IS NUMERIC'.
IF WS-NUM2 IS NUMERIC THEN
DISPLAY 'WS-NUM2 IS NUMERIC'.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
WS-NUM1 IS ALPHABETIC WS-NUM2 IS NUMERIC
條件名條件
條件名是使用者定義的名稱。它包含使用者指定的一組值。它的行為類似於布林變數。它們使用級別號 88 定義。它不會有 PIC 子句。
語法
以下是使用者定義條件語句的語法:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(3).
88 PASS VALUES ARE 041 THRU 100.
88 FAIL VALUES ARE 000 THRU 40.
PROCEDURE DIVISION.
A000-FIRST-PARA.
MOVE 65 TO WS-NUM.
IF PASS
DISPLAY 'Passed with ' WS-NUM ' marks'.
IF FAIL
DISPLAY 'FAILED with ' WS-NUM 'marks'.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
Passed with 065 marks
否定條件
否定條件透過使用 NOT 關鍵字給出。如果條件為真,並且我們在其前面使用了 NOT,則其最終值為假。
語法
以下是否定條件語句的語法:
IF NOT [CONDITION] COBOL Statements END-IF.
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(9) VALUE 25.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
DISPLAY 'IF-BLOCK'
ELSE
DISPLAY 'ELSE-BLOCK'
END-IF.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
ELSE-BLOCK
組合條件
組合條件包含兩個或多個使用邏輯運算子 AND 或 OR 連線的條件。
語法
以下是組合條件語句的語法:
IF [CONDITION] AND [CONDITION] COBOL Statements END-IF.
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 20.
01 WS-NUM2 PIC 9(2) VALUE 25.
01 WS-NUM3 PIC 9(2) VALUE 20.
PROCEDURE DIVISION.
A000-FIRST-PARA.
IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
DISPLAY 'Both condition OK'
ELSE
DISPLAY 'Error'
END-IF.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
Both condition OK
Evaluate 動詞
Evaluate 動詞是替換一系列 IF-ELSE 語句。它可以用於評估多個條件。它類似於 C 程式中的 SWITCH 語句。
示例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.
PROCEDURE DIVISION.
MOVE 3 TO WS-A.
EVALUATE TRUE
WHEN WS-A > 2
DISPLAY 'WS-A GREATER THAN 2'
WHEN WS-A < 0
DISPLAY 'WS-A LESS THAN 0'
WHEN OTHER
DISPLAY 'INVALID VALUE OF WS-A'
END-EVALUATE.
STOP RUN.
JCL 用於執行上述 COBOL 程式:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
編譯並執行上述程式時,會產生以下結果:
WS-A GREATER THAN 2
