本文概述
- 如果条件声明
- 关系条件
- 签收条件
- 课堂条件
- 条件名称条件
- 否定条件
- 组合条件
- 评估动词
- 如果条件声明
- 关系声明
- 签署声明
- 类声明
- 条件-名称声明
- 否定条件
- 组合条件
IF语句根据其在COBOL程序中的用法主要有三种类型:
简单中频
简单IF主要用于执行条件相关代码。如果条件为真, 则它将执行在IF块中编写的语句集。如果不满足条件, 则在IF语句终止后, 控件将转移到下一个语句。
语法如下:
IF Condition {Statement Block}[END-IF].
【COBOL-条件语句用法图解】在这里, END-IF是作用域终止符, 在程序中是可选的。句点(。)可以在IF块的最后一个语句中定义。
如果未指定期限, 则必须使用范围终止符END-IF。
如果别的
IF ELSE语句用于需要由两个条件执行的一组特定语句时。该语句主要用于执行条件特定的代码。
在IF-ELSE中, 如果指定条件为true, 则将执行语句块。如果条件为假, 则将执行另一组语句, 这些语句将位于ELSE块下。
语法如下:
IF Condition-1 {Statement-Block-1/NEXT SENTENCE}[ELSE] {Statement-Block-2/NEXT SENTENCE}[END-IF].
嵌套IF
与其他COBOL编程语言一样, COBOL也允许嵌套的IF语句。 IF语句中的IF语句称为嵌套IF语句。嵌套IF语句的深度没有限制。
语法如下:
IF Condition-1 THEN IF Condition-2 THENStatements-block-1 [ELSEStatements-block-2 END-IF][ELSE IF Condition-3 THENStatements-block-3 [ELSEStatements-block-4 END-IF]END-IF.]
范例1:
让我们看一下COBOL程序中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 THENDISPLAY 'IN LOOP 1 - IF BLOCK'IF WS-NUM3 = WS-NUM4 THENDISPLAY 'IN LOOP 2 - IF BLOCK'ELSEDISPLAY 'IN LOOP 2 - ELSE BLOCK'END-IFELSEDISPLAY 'IN LOOP 1 - ELSE BLOCK'END-IF.STOP RUN.
输出如下:
文章图片
范例2:
让我们看一下IF条件语句的另一个简单示例:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 CHECK-GENDER.05 GENDER PIC X(1).88 MALE VALUE 'M'.88 FEMALE VALUE 'F'.PROCEDURE DIVISION.MAIN-PARA.SET FEMALE TO TRUE.IF MALEDISPLAY "Gender: Male"ELSEDISPLAY "Gender: Female"END-IF.STOP RUN.
输出如下:
文章图片
关系条件 关系条件将两个操作数进行对比。这些操作数可以是标识符, 文字或算术表达式。
不管大小和使用条款如何, 都将进行代数数字字段的比较。
对于非数字操作数
通过比较两个大小相等的非数字操作数, 将从左侧开始以相应位置测量字符, 直到到达末尾。具有更多字符的操作数被认为更大。
在比较两个大小不同的操作数时, 较短的数据项将在末尾附加空格, 直到操作数的大小相等, 然后根据上一段中所述的规则进行比较。
关系运算符定义比较的类型, 如下所示:
关系运算符 | 我们可以写成 | 描述 |
---|---|---|
等于 | IS = | 这意味着, 等于 |
比更大 | 是> | 这意味着, 大于 |
小于 | IS < | 这意味着, 小于 |
不超过 | 不是> | 这意味着, 不大于 |
不少于 | 不是< | 这意味着, 不少于 |
不等于 | 不是= | 这意味着, 不等于 |
大于或等于 | IS> = | 表示, 大于或等于 |
少于或等于 | IS < = | 表示, 小于或等于 |
[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 A PIC 9(9).01 B PIC 9(9).PROCEDURE DIVISION.A000-FIRST-PARA.MOVE 24 TO A.MOVE 13 TO B.IF A IS GREATER THAN OR EQUAL TO B THENDISPLAY 'A IS GREATER THAN B'ELSEDISPLAY 'A IS LESS THAN B'END-IF.STOP RUN.
输出如下:
文章图片
签收条件 符号条件检查数字操作数的符号。它用于确定给定的数值是否大于, 小于, 等于或为零。
语法如下:
[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 A PIC S9(9) VALUE -1234.01 B PIC S9(9) VALUE 123456.PROCEDURE DIVISION.A000-FIRST-PARA.IF A IS POSITIVE THENDISPLAY 'A IS POSITIVE'.IF A IS NEGATIVE THENDISPLAY 'A IS NEGATIVE'.IF A IS ZERO THENDISPLAY 'A IS ZERO'.IF B IS POSITIVE THENDISPLAY 'B IS POSITIVE'.STOP RUN.
输出如下:
文章图片
课堂条件 类条件检查操作数是否仅包含字母或数字数据。空格以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-VAL1 PIC X(9) VALUE 'NIKITA '.01 WS-VAL2 PIC 9(9) VALUE 123456789.PROCEDURE DIVISION.A000-FIRST-PARA.IF WS-VAL1 IS ALPHABETIC THENDISPLAY 'WS-VAL1 IS ALPHABETIC'.IF WS-VAL1 IS NUMERIC THENDISPLAY 'WS-VAL1 IS NUMERIC'.IF WS-VAL2 IS NUMERIC THENDISPLAY 'WS-VAL2 IS NUMERIC'.STOP RUN.
输出如下:
文章图片
条件名称条件 条件名称是用户定义的名称。该语句包含一组用户定义的值, 并用作布尔变量。 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 85 TO WS-NUM.IF PASS DISPLAY 'Passed with ' WS-NUM ' marks'.IF FAIL DISPLAY 'FAILED with ' WS-NUM 'marks'.STOP RUN.
输出如下:
文章图片
否定条件 否定条件是通过使用关键字NOT给出的。如果满足条件并且我们在其前面未给出NOT, 则其最终值将为false。
语法如下:
IF NOT [CONDITION] COBOL StatementsEND-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 THENDISPLAY 'IF-BLOCK'ELSEDISPLAY 'ELSE-BLOCK'END-IF.STOP RUN.
输出如下:
文章图片
组合条件 组合条件语句包括与OR或AND逻辑运算符关联的两个或多个条件。
语法如下:
IF [CONDITION] AND [CONDITION]COBOL StatementsEND-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 THENDISPLAY 'Both condition OK'ELSEDISPLAY 'Error'END-IF.STOP RUN.
输出如下:
文章图片
评估动词 我们可以使用Evaluate动词代替一系列IF-ELSE语句。它的作用与C程序的SWITCH语句相同。这个动词在评估多个条件时非常有用。
在程序执行期间, 它提供多选控制。一次即可测试多个条件。
语法如下:
EVALUATE {Expression1} WHEN Cond-1Statement block-1 WHEN Cond-2Statement block-2.... WHEN Cond-nStatement block-n WHEN otherStatement block- otherEND-EVALUATE.
例子:
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 TRUEWHEN WS-A >
2DISPLAY 'WS-A GREATER THAN 2'WHEN WS-A <
0DISPLAY 'WS-A LESS THAN 0'WHEN OTHERDISPLAY 'INVALID VALUE OF WS-A'END-EVALUATE.STOP RUN.
输出如下:
文章图片
推荐阅读
- COBOL-文件访问模式
- COBOL-数据库接口
- COBOL-数据类型
- COBOL-数据布局
- COBOL-数组/表处理
- COBOL-编码表
- COBOL教程入门介绍
- XQuery If Then Else语句
- Swift fallthrough语句介绍和用法示例