- 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 - 快速指南
COBOL - 概述
COBOL 简介
COBOL 是一种高级语言。人们必须了解 COBOL 的工作方式。计算机只能理解机器码,即由 0 和 1 组成的二进制流。必须使用编译器将 COBOL 代码转换为机器代码。通过编译器运行程序源。编译器首先检查任何语法错误,然后将其转换为机器语言。编译器创建一个称为加载模块的输出文件。该输出文件包含 0 和 1 形式的可执行代码。
COBOL 的演变
20世纪50年代,当世界西部地区的业务不断增长时,需要将各种流程自动化以方便操作,这就催生了一种用于业务数据处理的高级编程语言。
1959年,CODASYL(数据系统语言会议)开发了COBOL。
下一个版本 COBOL-61 于 1961 年发布,并进行了一些修订。
1968年,COBOL被ANSI批准为商业用途的标准语言(COBOL-68)。
1974年和1985年再次修订,开发了后续版本,分别命名为COBOL-74和COBOL-85。
2002年,面向对象的COBOL发布,它可以使用封装的对象作为COBOL编程的正常部分。
COBOL 的重要性
COBOL 是第一个广泛使用的高级编程语言。它是一种类似英语的语言,用户友好。所有指令都可以用简单的英文单词编码。
COBOL 也用作自文档语言。
COBOL可以处理海量数据。
COBOL 与其以前的版本兼容。
COBOL 具有有效的错误消息,因此解决错误更容易。
COBOL的特点
标准语言
COBOL是一种标准语言,可以在IBM AS/400、个人计算机等机器上编译和执行。
商业导向
COBOL 专为与金融领域、国防领域等相关的面向业务的应用程序而设计。由于其先进的文件处理能力,它可以处理大量数据。
强大的语言
COBOL 是一种强大的语言,因为它的众多调试和测试工具可用于几乎所有计算机平台。
结构化语言
COBOL 中提供了逻辑控制结构,使其更易于阅读和修改。COBOL有不同的划分,因此很容易调试。
COBOL - 环境设置
我们在线搭建了COBOL编程环境,以便您可以在线编译和执行所有可用的示例。它使您对所阅读的内容充满信心,并使您能够使用不同的选项验证程序。请随意修改任何示例并在线执行。
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. PROCEDURE DIVISION. DISPLAY 'Hello World'. STOP RUN.
对于本教程中给出的大多数示例,您将在我们网站右上角的代码部分中找到“试用”选项,该选项将带您进入在线编译器。因此,请充分利用它并享受学习的乐趣。
在 Windows/Linux 上安装 COBOL
有许多适用于 Windows 的免费大型机模拟器,可用于编写和学习简单的 COBOL 程序。
Hercules 就是这样的模拟器之一,它可以通过以下几个简单步骤轻松安装在 Windows 上 -
下载并安装 Hercules 模拟器,可从 Hercules 的主页获取:www.hercules-390.eu
在 Windows 计算机上安装该软件包后,它将创建一个类似C:/hercules/mvs/cobol的文件夹。
运行命令提示符 (CMD) 并在 CMD 上到达目录 C:/hercules/mvs/cobol。
有关编写和执行 JCL 和 COBOL 程序的各种命令的完整指南可以在以下位置找到:
www.jaymoseley.com/hercules/installmvs/instmvs2.htm
Hercules 是大型机 System/370 和 ESA/390 架构以及最新 64 位 z/Architecture 的开源软件实现。Hercules 在 Linux、Windows、Solaris、FreeBSD 和 Mac OS X 下运行。
用户可以通过多种方式连接到大型机服务器,例如瘦客户端、虚拟终端、虚拟客户端系统 (VCS) 或虚拟桌面系统 (VDS)。每个有效用户都会获得一个登录 ID 来进入 Z/OS 界面(TSO/E 或 ISPF)。
编译 COBOL 程序
为了使用 JCL 以批处理模式执行 COBOL 程序,需要编译该程序,并使用所有子程序创建一个加载模块。JCL 使用加载模块而不是执行时的实际程序。加载库在执行时使用JCLLIB或STEPLIB连接并提供给 JCL 。
有许多大型机编译器实用程序可用于编译 COBOL 程序。一些公司使用Endevor等变更管理工具,它编译并存储程序的每个版本。这对于跟踪对程序所做的更改很有用。
//COMPILE JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID //* //STEP1 EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE //SYSIN DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR //SYSLIB DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR //SYSLMOD DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR //SYSPRINT DD SYSOUT=* //*
IGYCRCTL 是一个 IBM COBOL 编译器实用程序。编译器选项使用 PARM 参数传递。在上面的例子中,RMODE指示编译器在程序中使用相对寻址模式。COBOL 程序使用 SYSIN 参数传递。Copybook是SYSLIB中程序使用的库。
执行 COBOL 程序
下面给出了一个 JCL 示例,其中使用输入文件 MYDATA.URMI.INPUT 执行程序 MYPROG,并生成两个写入假脱机的输出文件。
//COBBSTEP JOB CLASS=6,NOTIFY=&SYSUID // //STEP10 EXEC PGM=MYPROG,PARM=ACCT5000 //STEPLIB DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR //INPUT1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR //OUT1 DD SYSOUT=* //OUT2 DD SYSOUT=* //SYSIN DD * //CUST1 1000 //CUST2 1001 /*
MYPROG的加载模块位于MYDATA.URMI.LOADLIB中。值得注意的是,上述 JCL 只能用于非 DB2 COBOL 模块。
执行 COBOL-DB2 程序
为了运行 COBOL-DB2 程序,JCL 和程序中使用了专门的 IBM 实用程序;DB2 区域和所需参数作为输入传递到实用程序。
运行 COBOL-DB2 程序的步骤如下 -
编译 COBOL-DB2 程序时,会创建 DBRM(数据库请求模块)和加载模块。DBRM 包含 COBOL 程序的 SQL 语句,并检查其语法是否正确。
DBRM 绑定到 COBOL 将在其中运行的 DB2 区域(环境)。这可以使用 JCL 中的 IKJEFT01 实用程序来完成。
绑定步骤之后,COBOL-DB2 程序(再次)使用 IKJEFT01 运行,并将加载库和 DBRM 库作为 JCL 的输入。
//STEP001 EXEC PGM=IKJEFT01 //* //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //* //input files //output files //SYSPRINT DD SYSOUT=* //SYSABOUT DD SYSOUT=* //SYSDBOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DISPLAY DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) - LIB('MYDATA.URMI.LOADLIB') END /*
在上面的示例中,MYCOBB 是使用 IKJEFT01 运行的 COBOL-DB2 程序。请注意,程序名称、DB2 子系统 ID (SSID) 和 DB2 计划名称是在 SYSTSIN DD 语句中传递的。DBRM 库在 STEPLIB 中指定。
COBOL - 程序结构
COBOL 程序结构由如下图所示的部分组成 -
这些部门的简要介绍如下 -
节是程序逻辑的逻辑细分。节是段落的集合。
段落是节或部门的细分。它是用户定义的或预定义的名称,后跟句点,由零个或多个句子/条目组成。
句子是一个或多个陈述的组合。句子仅出现在程序部分。句子必须以句号结束。
语句是执行某些处理的有意义的 COBOL 语句。
字符是层次结构中最低的并且不能被分割。
您可以在以下示例中将上述术语与 COBOL 程序关联起来 -
PROCEDURE DIVISION. A0000-FIRST-PARA SECTION. FIRST-PARAGRAPH. ACCEPT WS-ID - Statement-1 -----| MOVE '10' TO WS-ID - Statement-2 |-- Sentence - 1 DISPLAY WS-ID - Statement-3 -----| .
部门
COBOL 程序由四个部分组成。
鉴定科
它是每个 COBOL 程序的第一个也是唯一一个强制划分。程序员和编译器使用这种划分来识别程序。在此部分中,PROGRAM-ID 是唯一的强制段落。PROGRAM-ID 指定程序名称,可以包含 1 到 30 个字符。
使用在线实时演示选项尝试以下示例。
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. PROCEDURE DIVISION. DISPLAY 'Welcome to Tutorialspoint'. STOP RUN.
下面给出的是执行上述 COBOL 程序的JCL 。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
Welcome to Tutorialspoint
环境科
环境划分用于指定程序的输入和输出文件。它由两部分组成 -
配置部分提供有关编写和执行程序的系统的信息。它由两段组成 -
源计算机- 用于编译程序的系统。
对象计算机- 用于执行程序的系统。
输入-输出部分提供有关程序中使用的文件的信息。它由两段组成 -
文件控制- 提供程序中使用的外部数据集的信息。
IO 控制 - 提供程序中使用的文件的信息。
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. XXX-ZOS. OBJECT-COMPUTER. XXX-ZOS. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILEN ASSIGN TO DDNAME ORGANIZATION IS SEQUENTIAL.
数据部
数据划分用于定义程序中使用的变量。它由四个部分组成 -
文件部分用于定义文件的记录结构。
工作存储部分用于声明程序中使用的临时变量和文件结构。
本地存储部分与工作存储部分类似。唯一的区别是每次程序开始执行时都会分配并初始化变量。
链接部分用于描述从外部程序接收的数据名称。
COBOL程序
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILEN ASSIGN TO INPUT. ORGANIZATION IS SEQUENTIAL. ACCESS IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FILEN 01 NAME PIC A(25). WORKING-STORAGE SECTION. 01 WS-STUDENT PIC A(30). 01 WS-ID PIC 9(5). LOCAL-STORAGE SECTION. 01 LS-CLASS PIC 9(3). LINKAGE SECTION. 01 LS-ID PIC 9(5). PROCEDURE DIVISION. DISPLAY 'Executing COBOL program using JCL'. STOP RUN.
执行上述 COBOL 程序的 JCL如下-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //INPUT DD DSN = ABC.EFG.XYZ,DISP = SHR
当您编译并执行上述程序时,它会产生以下结果 -
Executing COBOL program using JCL
程序科
过程划分用于包含程序的逻辑。它由使用数据部门中定义的变量的可执行语句组成。在此部分中,段落和章节名称是用户定义的。
过程划分中必须至少有一条语句。结束该部分执行的最后一条语句是调用程序中使用的STOP RUN或被调用程序中使用的EXIT PROGRAM 。
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NAME PIC A(30). 01 WS-ID PIC 9(5) VALUE '12345'. PROCEDURE DIVISION. A000-FIRST-PARA. DISPLAY 'Hello World'. MOVE 'TutorialsPoint' TO WS-NAME. DISPLAY "My name is : "WS-NAME. DISPLAY "My ID is : "WS-ID. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
Hello World My name is : TutorialsPoint My ID is : 12345
COBOL - 基本语法
字符集
“角色”在层次结构中处于最低位置,无法进一步划分。COBOL 字符集包括 78 个字符,如下所示 -
先生。 | 特征及描述 |
---|---|
1 | AZ 字母(大写) |
2 | 阿兹 字母(小写) |
3 | 0-9 数字 |
4 |
空间 |
5 | + 加号 |
6 | - 减号或连字符 |
7 | * 星号 |
8 | / 正斜杠 |
9 | $ 货币符号 |
10 | , 逗号 |
11 | ; 分号 |
12 |
。 小数点或句点 |
13 |
” 引号 |
14 |
( 左括号 |
15 |
) 右括号 |
16 |
> 比...更棒 |
17 号 |
< 少于 |
18 |
: 冒号 |
19 |
' 撇号 |
20 |
= 等号 |
编码表
COBOL的源程序必须以编译器可接受的格式编写。COBOL 程序是在 COBOL 编码表上编写的。编码表的每行有 80 个字符位置。
角色位置分为以下五个字段 -
职位 | 场地 | 描述 |
---|---|---|
1-6 | 列号 | 保留用于行号。 |
7 | 指标 | 它可以有星号 (*) 表示注释,连字符 (-) 表示继续,斜杠 (/) 表示换页。 |
8-11 | A区 | 所有 COBOL 划分、部分、段落和一些特殊条目必须从区域 A 开始。 |
12-72 | B区 | 所有 COBOL 语句必须从区域 B 开始。 |
73-80 | 识别区 | 程序员可以根据需要使用它。 |
例子
以下示例显示了 COBOL 编码表 -
000100 IDENTIFICATION DIVISION. 000100 000200 PROGRAM-ID. HELLO. 000101 000250* THIS IS A COMMENT LINE 000102 000300 PROCEDURE DIVISION. 000103 000350 A000-FIRST-PARA. 000104 000400 DISPLAY “Coding Sheet”. 000105 000500 STOP RUN. 000106
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
Coding Sheet
字符串
字符串是通过组合各个字符而形成的。一个字符串可以是
- 评论,
- 字面意思,或者
- COBOL 词。
所有字符串必须以分隔符结束。分隔符用于分隔字符串。
常用分隔符 - 空格、逗号、句号、撇号、左/右括号和引号。
评论
注释是不影响程序执行的字符串。它可以是任意字符组合。
有两种类型的评论 -
评论专线
注释行可以写在任何列中。编译器不会检查注释行的语法,而是将其视为文档。
评论输入
注释条目是那些包含在识别部门的可选段落中的条目。它们写在B区,供程序员参考。
以粗体突出显示的文本是以下示例中的注释条目 -
000100 IDENTIFICATION DIVISION. 000100 000150 PROGRAM-ID. HELLO. 000101 000200 AUTHOR. TUTORIALSPOINT. 000102 000250* THIS IS A COMMENT LINE 000103 000300 PROCEDURE DIVISION. 000104 000350 A000-FIRST-PARA. 000105 000360/ First Para Begins - Documentation Purpose 000106 000400 DISPLAY “Comment line”. 000107 000500 STOP RUN. 000108
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
Comment Line
文字
文字是直接硬编码在程序中的常量。在下面的示例中,“Hello World”是一个文字。
PROCEDURE DIVISION. DISPLAY 'Hello World'.
有两种类型的文字,如下所述 -
字母数字文字
字母数字文字用引号或撇号括起来。长度最多可达 160 个字符。撇号或引号只有在配对时才可以成为文字的一部分。文字的开头和结尾应该相同,可以是撇号,也可以是引号。
例子
以下示例显示了有效和无效的字母数字文字 -
Valid: ‘This is valid’ "This is valid" ‘This isn’’t invalid’ Invalid: ‘This is invalid” ‘This isn’t valid’
数字文字
数字文字是 0 到 9 的数字、+、- 或小数点的组合。长度最多可达 18 个字符。符号不能是最右边的字符。小数点不应出现在末尾。
例子
以下示例显示了有效和无效的数字文字 -
Valid: 100 +10.9 -1.9 Invalid: 1,00 10. 10.9-
COBOL 字
COBOL Word 是一个字符串,可以是保留字或用户定义字。长度最多可达 30 个字符。
用户自定义
用户定义的单词用于命名文件、数据、记录、段落名称和部分。形成用户定义的单词时允许使用字母、数字和连字符。不能使用 COBOL 保留字。
保留字
保留字是 COBOL 中预定义的字。我们经常使用的不同类型的保留字如下 -
关键字如 ADD、ACCEPT、MOVE 等。
特殊字符单词,如 +、-、*、<、<= 等
图形常量是诸如零、空格等常量值。下表列出了图形常量的所有常量值。
形象常数
先生。 | 图形常数和描述 |
---|---|
1 |
高价值 一个或多个字符将按降序排列在最高位置。 |
2 |
低值 一个或多个字符在二进制表示中包含零。 |
3 |
零/零 一个或多个零取决于变量的大小。 |
4 |
空间 一个或多个空格。 |
5 |
引号 单引号或双引号。 |
6 |
所有字面量 用文字填充数据项。 |
COBOL - 数据类型
数据划分用于定义程序中使用的变量。要在 COBOL 中描述数据,必须理解以下术语 -
- 数据名称
- 等级数
- 图片条款
- 价值条款
01 TOTAL-STUDENTS PIC9(5) VALUE '125'. | | | | | | | | | | | | Level Number Data Name Picture Clause Value Clause
数据名称
数据名称必须在数据部门中定义,然后才能在过程部门中使用。它们必须有一个用户定义的名称;不能使用保留字。数据名称引用了存储实际数据的内存位置。它们可以是基本类型或团体类型。
例子
以下示例显示了有效和无效的数据名称 -
Valid: WS-NAME TOTAL-STUDENTS A100 100B Invalid: MOVE (Reserved Words) COMPUTE (Reserved Words) 100 (No Alphabet) 100+B (+ is not allowed)
等级数
级别编号用于指定记录中数据的级别。它们用于区分基本项目和团体项目。基本项目可以组合在一起以创建组项目。
先生。 | 级别编号和描述 |
---|---|
1 |
01 记录描述条目 |
2 |
02 至 49 团体和基本项目 |
3 |
66 重命名子句项目 |
4 |
77 不可再分的项目 |
5 |
88 条件名称输入 |
基本项目不能进一步划分。级别编号、数据名称、图片子句和值子句(可选)用于描述基本项。
组项目由一个或多个基本项目组成。级别编号、数据名称和值子句(可选)用于描述组项目。组级别编号始终为 01。
例子
以下示例显示了组和基本项目 -
DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NAME PIC X(25). ---> ELEMENTARY ITEM 01 WS-CLASS PIC 9(2) VALUE '10'. ---> ELEMENTARY ITEM 01 WS-ADDRESS. ---> GROUP ITEM 05 WS-HOUSE-NUMBER PIC 9(3). ---> ELEMENTARY ITEM 05 WS-STREET PIC X(15). ---> ELEMENTARY ITEM 05 WS-CITY PIC X(15). ---> ELEMENTARY ITEM 05 WS-COUNTRY PIC X(15) VALUE 'INDIA'. ---> ELEMENTARY ITEM
图片条款
图片子句用于定义以下项目 -
数据类型可以是数字、字母或字母数字。数字类型仅包含数字 0 到 9。字母类型包含字母 A 到 Z 和空格。字母数字类型由数字、字母和特殊字符组成。
符号可与数字数据一起使用。它可以是 + 或 –。
小数点位置可与数值数据一起使用。假定位置是小数点位置,不包含在数据中。
长度定义数据项使用的字节数。
图片子句中使用的符号 -
先生。 | 符号及说明 |
---|---|
1 |
9 数字 |
2 |
A 按字母顺序 |
3 |
X 字母数字 |
4 |
V 隐式小数 |
5 |
S 符号 |
6 |
磷 假设十进制 |
例子
以下示例显示了 PIC 子句的使用 -
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC S9(3)V9(2). 01 WS-NUM2 PIC PPP999. 01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45. 01 WS-NAME PIC A(6) VALUE 'ABCDEF'. 01 WS-ID PIC X(5) VALUE 'A121$'. PROCEDURE DIVISION. DISPLAY "WS-NUM1 : "WS-NUM1. DISPLAY "WS-NUM2 : "WS-NUM2. DISPLAY "WS-NUM3 : "WS-NUM3. DISPLAY "WS-NAME : "WS-NAME. DISPLAY "WS-ID : "WS-ID. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : +000.00 WS-NUM2 : .000000 WS-NUM3 : -123.45 WS-NAME : ABCDEF WS-ID : A121$
价值条款
Value 子句是一个可选子句,用于初始化数据项。这些值可以是数字文字、字母数字文字或图形常量。它可以与团体项目和基本项目一起使用。
例子
以下示例显示了 VALUE 子句的使用 -
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 99V9 VALUE IS 3.5. 01 WS-NAME PIC A(6) VALUE 'ABCD'. 01 WS-ID PIC 99 VALUE ZERO. PROCEDURE DIVISION. DISPLAY "WS-NUM1 : "WS-NUM1. DISPLAY "WS-NAME : "WS-NAME. DISPLAY "WS-ID : "WS-ID. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 03.5 WS-NAME : ABCD WS-ID : 00
COBOL - 基本动词
COBOL 动词用于数据处理的过程划分。语句始终以 COBOL 动词开头。有多种具有不同类型动作的 COBOL 动词。
输入/输出动词
输入/输出动词用于从用户获取数据并显示 COBOL 程序的输出。此过程使用以下两个动词 -
接受动词
Accept 动词用于从操作系统或直接从用户获取日期、时间和日期等数据。如果程序正在接受来自用户的数据,那么它需要通过 JCL 传递。从操作系统获取数据时,包含 FROM 选项,如下例所示 -
ACCEPT WS-STUDENT-NAME. ACCEPT WS-DATE FROM SYSTEM-DATE.
显示动词
显示动词用于显示 COBOL 程序的输出。
DISPLAY WS-STUDENT-NAME. DISPLAY "System date is : " WS-DATE.
COBOL计划
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STUDENT-NAME PIC X(25). 01 WS-DATE PIC X(10). PROCEDURE DIVISION. ACCEPT WS-STUDENT-NAME. ACCEPT WS-DATE FROM DATE. DISPLAY "Name : " WS-STUDENT-NAME. DISPLAY "Date : " WS-DATE. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //INPUT DD DSN=PROGRAM.DIRECTORY,DISP=SHR //SYSIN DD * TutorialsPoint /*
当您编译并执行上述程序时,它会产生以下结果 -
Name : TutorialsPoint Date : 2014-08-30
初始化动词
初始化动词用于初始化组项目或基本项目。无法初始化带有 RENAME 子句的数据名称。数字数据项被零替换。字母数字或字母数据项被空格替换。如果我们包含 REPLACING 项,则数据项可以初始化为给定的替换值,如下例所示 -
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NAME PIC A(30) VALUE 'ABCDEF'. 01 WS-ID PIC 9(5). 01 WS-ADDRESS. 05 WS-HOUSE-NUMBER PIC 9(3). 05 WS-COUNTRY PIC X(15). 05 WS-PINCODE PIC 9(6) VALUE 123456. PROCEDURE DIVISION. A000-FIRST-PARA. INITIALIZE WS-NAME, WS-ADDRESS. INITIALIZE WS-ID REPLACING NUMERIC DATA BY 12345. DISPLAY "My name is : "WS-NAME. DISPLAY "My ID is : "WS-ID. DISPLAY "Address : "WS-ADDRESS. DISPLAY "House Number : "WS-HOUSE-NUMBER. DISPLAY "Country : "WS-COUNTRY. DISPLAY "Pincode : "WS-PINCODE. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
My name is : My ID is : 12345 Address : 000 000000 House Number : 000 Country : Pincode : 000000
移动动词
Move动词用于将数据从源数据复制到目标数据。它可用于基本数据项和组数据项。对于组数据项,使用 MOVE CORRESPONDING/CORR。在尝试选项中,MOVE CORR 不起作用;但在大型机服务器上,它可以工作。
要从字符串中移动数据,请使用 MOVE(x:l),其中 x 是起始位置,l 是长度。如果目标数据项 PIC 子句小于源数据项 PIC 子句,则数据将被截断。如果目标数据项 PIC 子句多于源数据项 PIC 子句,则将在额外字节中添加 ZEROS 或 SPACES。下面的例子就很清楚了。
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). 01 WS-ADDRESS. 05 WS-HOUSE-NUMBER PIC 9(3). 05 WS-COUNTRY PIC X(5). 05 WS-PINCODE PIC 9(6). 01 WS-ADDRESS1. 05 WS-HOUSE-NUMBER1 PIC 9(3). 05 WS-COUNTRY1 PIC X(5). 05 WS-PINCODE1 PIC 9(6). PROCEDURE DIVISION. A000-FIRST-PARA. MOVE 123456789 TO WS-NUM1. MOVE WS-NUM1 TO WS-NUM2 WS-NUM3. MOVE WS-NUM1(3:6) TO WS-NUM4. MOVE 123 TO WS-HOUSE-NUMBER. MOVE 'INDIA' TO WS-COUNTRY. MOVE 112233 TO WS-PINCODE. MOVE WS-ADDRESS TO WS-ADDRESS1. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUM3 : " WS-NUM3 DISPLAY "WS-NUM4 : " WS-NUM4 DISPLAY "WS-ADDRESS : " WS-ADDRESS DISPLAY "WS-ADDRESS1 : " WS-ADDRESS1 STOP RUN.
JCL来执行上面的COBOL程序。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 123456789 WS-NUM2 : 123456789 WS-NUM3 : 56789 WS-NUM4 : 345678 WS-ADDRESS : 123INDIA112233 WS-ADDRESS1 : 123INDIA112233
合法的举动
下表提供了有关合法举措的信息 -
按字母顺序 | 字母数字 | 数字 | |
---|---|---|---|
按字母顺序 | 可能的 | 可能的 | 不可能 |
字母数字 | 可能的 | 可能的 | 可能的 |
数字 | 不可能 | 可能的 | 可能的 |
添加动词
Add 动词用于将两个或多个数字相加并将结果存储在目标操作数中。
句法
下面给出的是添加两个或多个数字的语法 -
ADD A B TO C D ADD A B C TO D GIVING E ADD CORR WS-GROUP1 TO WS-GROUP2
在语法 1 中,A、B、C 相加,结果存储在 C 中(C=A+B+C)。A、B、D 相加,结果存储在 D 中 (D = A + B + D)。
在语法2中,A、B、C、D相加,结果存储在E中(E=A+B+C+D)。
在语法 3 中,添加 WS-GROUP1 和 WS-GROUP2 内的子组项,并将结果存储在 WS-GROUP2 中。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9) VALUE 10 . 01 WS-NUM2 PIC 9(9) VALUE 10. 01 WS-NUM3 PIC 9(9) VALUE 10. 01 WS-NUM4 PIC 9(9) VALUE 10. 01 WS-NUMA PIC 9(9) VALUE 10. 01 WS-NUMB PIC 9(9) VALUE 10. 01 WS-NUMC PIC 9(9) VALUE 10. 01 WS-NUMD PIC 9(9) VALUE 10. 01 WS-NUME PIC 9(9) VALUE 10. PROCEDURE DIVISION. ADD WS-NUM1 WS-NUM2 TO WS-NUM3 WS-NUM4. ADD WS-NUMA WS-NUMB WS-NUMC TO WS-NUMD GIVING WS-NUME. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUM3 : " WS-NUM3 DISPLAY "WS-NUM4 : " WS-NUM4 DISPLAY "WS-NUMA : " WS-NUMA DISPLAY "WS-NUMB : " WS-NUMB DISPLAY "WS-NUMC : " WS-NUMC DISPLAY "WS-NUMD : " WS-NUMD DISPLAY "WS-NUME : " WS-NUME STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 000000010 WS-NUM2 : 000000010 WS-NUM3 : 000000030 WS-NUM4 : 000000030 WS-NUMA : 000000010 WS-NUMB : 000000010 WS-NUMC : 000000010 WS-NUMD : 000000010 WS-NUME : 000000040
减动词
减法动词用于减法运算。
句法
下面给出的是减法运算的语法 -
SUBTRACT A B FROM C D SUBTRACT A B C FROM D GIVING E SUBTRACT CORR WS-GROUP1 TO WS-GROUP2
在语法 1 中,A 和 B 与 C 相加或相减。结果存储在 C 中 (C = C-(A+B))。A 和 B 与 D 相加或相减。结果存储在 D 中 (D = D-(A+B))。
在语法 2 中,A、B、C 与 D 相加或相减。结果存储在 E 中 (E = D-(A+B+C))
在语法 3 中,将 WS-GROUP1 和 WS-GROUP2 内的子组项相减,并将结果存储在 WS-GROUP2 中。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9) VALUE 10 . 01 WS-NUM2 PIC 9(9) VALUE 10. 01 WS-NUM3 PIC 9(9) VALUE 100. 01 WS-NUM4 PIC 9(9) VALUE 100. 01 WS-NUMA PIC 9(9) VALUE 10. 01 WS-NUMB PIC 9(9) VALUE 10. 01 WS-NUMC PIC 9(9) VALUE 10. 01 WS-NUMD PIC 9(9) VALUE 100. 01 WS-NUME PIC 9(9) VALUE 10. PROCEDURE DIVISION. SUBTRACT WS-NUM1 WS-NUM2 FROM WS-NUM3 WS-NUM4. SUBTRACT WS-NUMA WS-NUMB WS-NUMC FROM WS-NUMD GIVING WS-NUME. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUM3 : " WS-NUM3 DISPLAY "WS-NUM4 : " WS-NUM4 DISPLAY "WS-NUMA : " WS-NUMA DISPLAY "WS-NUMB : " WS-NUMB DISPLAY "WS-NUMC : " WS-NUMC DISPLAY "WS-NUMD : " WS-NUMD DISPLAY "WS-NUME : " WS-NUME STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 000000010 WS-NUM2 : 000000010 WS-NUM3 : 000000080 WS-NUM4 : 000000080 WS-NUMA : 000000010 WS-NUMB : 000000010 WS-NUMC : 000000010 WS-NUMD : 000000100 WS-NUME : 000000070
乘动词
乘法动词用于乘法运算。
句法
下面给出的是两个或多个数字相乘的语法 -
MULTIPLY A BY B C MULTIPLY A BY B GIVING E
在语法 1 中,A 和 B 相乘,结果存储在 B 中 (B=A*B)。A 和 C 相乘,结果存储在 C 中 (C = A * C)。
在语法 2 中,A 和 B 相乘,结果存储在 E 中 (E=A*B)。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9) VALUE 10 . 01 WS-NUM2 PIC 9(9) VALUE 10. 01 WS-NUM3 PIC 9(9) VALUE 10. 01 WS-NUMA PIC 9(9) VALUE 10. 01 WS-NUMB PIC 9(9) VALUE 10. 01 WS-NUMC PIC 9(9) VALUE 10. PROCEDURE DIVISION. MULTIPLY WS-NUM1 BY WS-NUM2 WS-NUM3. MULTIPLY WS-NUMA BY WS-NUMB GIVING WS-NUMC. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUM3 : " WS-NUM3 DISPLAY "WS-NUMA : " WS-NUMA DISPLAY "WS-NUMB : " WS-NUMB DISPLAY "WS-NUMC : " WS-NUMC STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 000000010 WS-NUM2 : 000000100 WS-NUM3 : 000000100 WS-NUMA : 000000010 WS-NUMB : 000000010 WS-NUMC : 000000100
划分动词
除法动词用于除法运算。
句法
下面给出的是除法运算的语法 -
DIVIDE A INTO B DIVIDE A BY B GIVING C REMAINDER R
在语法 1 中,B 除以 A,结果存储在 B 中 (B=B/A)。
在语法 2 中,A 除以 B,结果存储在 C (C=A/B) 中,余数存储在 R 中。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9) VALUE 5. 01 WS-NUM2 PIC 9(9) VALUE 250. 01 WS-NUMA PIC 9(9) VALUE 100. 01 WS-NUMB PIC 9(9) VALUE 15. 01 WS-NUMC PIC 9(9). 01 WS-REM PIC 9(9). PROCEDURE DIVISION. DIVIDE WS-NUM1 INTO WS-NUM2. DIVIDE WS-NUMA BY WS-NUMB GIVING WS-NUMC REMAINDER WS-REM. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUMA : " WS-NUMA DISPLAY "WS-NUMB : " WS-NUMB DISPLAY "WS-NUMC : " WS-NUMC DISPLAY "WS-REM : " WS-REM STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 000000005 WS-NUM2 : 000000050 WS-NUMA : 000000100 WS-NUMB : 000000015 WS-NUMC : 000000006 WS-REM : 000000010
计算语句
计算语句用于在 COBOL 中编写算术表达式。这是加法、减法、乘法和除法的替代。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9) VALUE 10 . 01 WS-NUM2 PIC 9(9) VALUE 10. 01 WS-NUM3 PIC 9(9) VALUE 10. 01 WS-NUMA PIC 9(9) VALUE 50. 01 WS-NUMB PIC 9(9) VALUE 10. 01 WS-NUMC PIC 9(9). PROCEDURE DIVISION. COMPUTE WS-NUMC= (WS-NUM1 * WS-NUM2) - (WS-NUMA / WS-NUMB) + WS-NUM3. DISPLAY "WS-NUM1 : " WS-NUM1 DISPLAY "WS-NUM2 : " WS-NUM2 DISPLAY "WS-NUM3 : " WS-NUM3 DISPLAY "WS-NUMA : " WS-NUMA DISPLAY "WS-NUMB : " WS-NUMB DISPLAY "WS-NUMC : " WS-NUMC STOP RUN.
JCL来执行上面的COBOL程序。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-NUM1 : 000000010 WS-NUM2 : 000000010 WS-NUM3 : 000000010 WS-NUMA : 000000050 WS-NUMB : 000000010 WS-NUMC : 000000105
COBOL - 数据布局
COBOL 布局是对每个字段的使用及其中存在的值的描述。以下是 COBOL 中使用的数据描述条目 -
- 重新定义条款
- 重命名条款
- 使用条款
- 字帖
重新定义条款
Redefines子句用于定义具有不同数据描述的存储。如果一个或多个数据项不同时使用,则相同的存储可用于另一数据项。因此,相同的存储可以被不同的数据项引用。
句法
以下是 Redefines 子句的语法 -
01 WS-OLD PIC X(10). 01 WS-NEW1 REDEFINES WS-OLD PIC 9(8). 01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
以下是所使用参数的详细信息 -
- WS-OLD 是重新定义的项目
- WS-NEW1和WS-NEW2正在重新定义项目
重定义项和重定义项的级别号必须相同,且不能是66或88级号。不要将 VALUE 子句与重新定义项一起使用。在文件部分中,不要使用级别号为 01 的 redefines 子句。重新定义定义必须是您要重新定义的下一个数据描述。重新定义的项目将始终具有与重新定义的项目相同的值。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-DESCRIPTION. 05 WS-DATE1 VALUE '20140831'. 10 WS-YEAR PIC X(4). 10 WS-MONTH PIC X(2). 10 WS-DATE PIC X(2). 05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8). PROCEDURE DIVISION. DISPLAY "WS-DATE1 : "WS-DATE1. DISPLAY "WS-DATE2 : "WS-DATE2. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-DATE1 : 20140831 WS-DATE2 : 20140831
重命名条款
Renames 子句用于为现有数据项指定不同的名称。它用于重新组合数据名称并为其赋予新名称。新的数据名称可以跨组或基本项目重命名。级别编号 66 保留用于重命名。
句法
以下是重命名子句的语法 -
01 WS-OLD. 10 WS-A PIC 9(12). 10 WS-B PIC X(20). 10 WS-C PIC A(25). 10 WS-D PIC X(12). 66 WS-NEW RENAMES WS-A THRU WS-C.
重命名只能在同一级别进行。在上面的示例中,WS-A、WS-B 和 WS-C 处于同一级别。重命名定义必须是您要重命名的下一个数据描述。请勿使用 01、77 或 66 级别编号的重命名。用于重命名的数据名称必须按顺序出现。无法重命名带有发生子句的数据项。
例子
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-DESCRIPTION. 05 WS-NUM. 10 WS-NUM1 PIC 9(2) VALUE 20. 10 WS-NUM2 PIC 9(2) VALUE 56. 05 WS-CHAR. 10 WS-CHAR1 PIC X(2) VALUE 'AA'. 10 WS-CHAR2 PIC X(2) VALUE 'BB'. 66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2. PROCEDURE DIVISION. DISPLAY "WS-RENAME : " WS-RENAME. STOP RUN.
JCL执行上述 COBOL 程序 -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
当您编译并执行上述程序时,它会产生以下结果 -
WS-RENAME : 56AABB
使用条款
使用子句指定存储格式数据的操作系统。它不能与级别号 66 或 88 一起使用。如果在组上指定了用法子句,则所有基本项将具有相同的用法子句。使用子句可用的不同选项如下 -
展示
数据项以 ASCII 格式存储,每个字符占用 1 个字节。这是默认用法。
以下示例计算所需的字节数 -
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY. It requires 8 bytes as sign and decimal doesn't require any byte. 01 WS-NUM PIC 9(5) USAGE IS DISPLAY. It requires 5 bytes as sign.
计算/COMP
数据项以二进制格式存储。这里,数据项必须是整数。
以下示例计算所需的字节数 -
01 WS-NUM PIC S9(n) USAGE IS COMP. If 'n' = 1 to 4, it takes 2 bytes. If 'n' = 5 to 9, it takes 4 bytes. If 'n' = 10 to 18, it takes 8 bytes.
康普-1
数据项与 Real 或 Float 类似,表示为单精度浮点数。在内部,数据以十六进制格式存储。COMP-1 不接受 PIC 条款。这里1个字等于4个字节。
康普-2
数据项与Long或Double类似,表示为双精度浮点数。在内部,数据以十六进制格式存储。COMP-2 未指定 PIC 子句。这里2个字等于8个字节。
康普-3
数据项以压缩十进制格式存储。每个数字占据半个字节(1 个半字节),符号存储在最右边的半字节中。
以下示例计算所需的字节数 -
01 WS-NUM PIC 9(n) USAGE IS COMP. Number of bytes = n/2 (If n is even) Number of bytes = n/2 + 1(If n is odd, consider only integer part) 01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21. It requires 2 bytes of storage as each digit occupies half a byte. 01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21. It requires 3 bytes of storage as each digit occupies half a byte.
字帖
COBOL copybook 是定义数据结构的代码选择。如果某个特定的数据结构在许多程序中使用,那么我们可以使用copybook,而不是再次编写相同的数据结构。我们使用 COPY 语句在程序中包含抄写本。COPY 语句用于WorkingStorage 部分。
以下示例在 COBOL 程序中包含一本抄写本 -
DATA DIVISION. WORKING-STORAGE SECTION. COPY ABC.
这里ABC是字帖名称。ABC copybook 中的以下数据项可以在程序内使用。
01 WS-DESCRIPTION. 05 WS-NUM. 10 WS-NUM1 PIC 9(2) VALUE 20. 10 WS-NUM2 PIC 9(2) VALUE 56. 05 WS-CHAR. 10 WS-CHAR1 PIC X(2) VALUE 'AA'. 10 WS-CHAR2 PIC X(2) VALUE 'BB'.
COBOL - 条件语句
条件语句用于根据程序员指定的某些条件来更改执行流程。条件语句将始终评估为 true 或 false。条件用于 IF、Evaluate 和 Perform 语句。不同类型的条件如下 -
- IF 条件语句
- 关系条件
- 签署条件
- 班级条件
- 条件名称 条件
- 否定条件
- 组合条件
IF 条件语句
IF 语句检查条件。如果条件为真,则执行 IF 块;如果条件为假,则执行 ELSE 块。
END-IF用于结束 IF 块。要结束 IF 块,可以使用句点代替 END-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
签署条件
符号条件用于检查数字操作数的符号。它确定给定的数值是否大于、小于或等于 0。
句法
以下是 Sign 条件语句的语法 -
[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
条件名称 条件
条件名称是用户定义的名称。它包含一组由用户指定的值。它的Behave类似于布尔变量。它们是用级别号 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 关键字给出的。如果一个条件为 true 并且我们在它前面给出了 NOT,那么它的最终值将为 false。
句法
以下是否定条件语句的语法