C7-COBOL 条件语句

COBOL 条件语句

条件语句(conditional statement)是用于根据程序员指定的某些条件更改执行流。条件语句将始终计算为true或false。条件被使用在IF, Evaluate 和 Perform语句。不同类型的条件语句如下:

  • IF条件语句
  • 关系(·)条件
  • 符号(sign)条件
  • 类(class)条件
  • 条件名称(Condition-Name)条件
  • 否定(negated)条件
  • 组合(combined)条件

IF条件语句

IF语句检查条件。如果条件为真(true),则执行IF块;如果条件为假(false),则执行ELSE块。
END-IF:用于结束IF块。也可以使用一个句号替代END-IF结束IF块。但是对于多个IF块,最好使用END-IF。
****Nested-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. ANDRECC.

        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.ANDRECC
           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(字母),ALPHABTICTIC-LOWER(小写字母)和ALPHABETIC-UPPER(大写字母)中会被算入。

语法

以下是类条件语句的语法:

[Data Name/Arithmetic Operation>]

          [IS] [NOT] 

[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]

[Data Name/Arithmetic Operation]

        IDENTIFICATION DIVISION.
        PROGRAM-ID. ANDRECC.

        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-NUM1 IS NUMERIC'.

        STOP RUN.

JCL执行上述COBOL程序。

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

当你编译和执行上面的程序,会产生以下结果:

WS-NUM1 IS ALPHABETIC
WS-NUM1 IS NUMERIC

条件名条件

条件名称是用户定义的名称。它包含一组由用户指定的值,表现的类似于布尔变量。它们用级数88定义,不具有PIC子句。
作用:用来代替一系列繁杂的IF-ELSE语句。
格式:88 条件名 VALUE IS/ARE 常量1[THROUGH/THRU 常量2]
[常量3[[THROUGH/THRU 常量4]]……
举例:首先在数据部说明
77 X (条件变量) PIC 9(6).
88 X1 VALUE 0 THRU 99.
88 X2 VALUE 100 THRU 999.
88 X3 VALUE 1000 THRU 4999.
88 X4 VALUE 5000 THRU 100000.
经过上面的说明后,可以在过程部中直接使用条件名条件。
IF X1 MOVE 0.03 TO R. (在0<=X<100时,R=0.03)
IF X2 MOVE 0.04 TO R. (在100<=X<1000时,R=0.04)
IF X3 MOVE 0.05 TO R. (在1000<=X<5000时,R=0.05)
IF X4 MOVE 0.06 TO R. (在5000<=X<=100000时,R=0.06)

语法

以下是用户定义的条件语句的语法:

88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].

        IDENTIFICATION DIVISION.
        PROGRAM-ID. ANDRECC.

        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关键字给出。如果一个条件为true,而我们没有它的前面给出NOT,那么它的最终值将是false。

语法

以下是否定条件语句的语法:

IF NOT [CONDITION] 
   COBOL Statements
END-IF.

        IDENTIFICATION DIVISION.
        PROGRAM-ID. ANDRECC.

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

        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程序:

//示例作业(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
// STEP1 EXEC PGM = HELLO

当你编译和执行上面的程序,会产生以下结果:

WS-A GREATER THAN 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值