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
    
  • 关系条件

    关系条件比较两个操作数,其中任何一个都可以是标识符、文字或算术表达式。无论大小和使用条款如何,都会对数字字段进行代数比较。
    For non-numeric operands
    如果比较两个大小相等的非数字操作数,则将字符从左侧与相应位置进行比较,直到到达末尾。包含更多字符的操作数被声明为更大。
    如果比较两个大小不等的非数字操作数,则较短的数据项在末尾附加空格,直到操作数的大小相等,然后根据上一点提到的规则进行比较。

    句法

    下面给出的是关系条件语句的语法 -
    
    [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 动词是一系列 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