- 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
