一、COBOL简介
COBOL(Common Business Oriented Language):面向过程的高级程序设计语言;
二、COBOL语法格式
COBOL程序的每行代码通常分为80列,有非标准的80列可以超过80列,写多少列都可以;
80列中列与列不同的范围及其意义如下:
第1-6列:序号区
第7列:指示符区
1." "空,后面接正常的COBOL语句;
2."*"注释符,注释当前行;
3."/"注释符,注释当前列,程序编译时,强制程序挂起清单另起一页;
4."-"字符串连接符(等同Java中'+');
5."D"Debug行的标识符,Debug模式时,该行代码执行;
6."B"标明BATCH程序;
7."C"标明CICS程序;
第8-11列:A区,所有的COBOL各部、节、段、和一些特殊条目必须在A区开始;
第12-72列:B区,所有的COBOL语句必须在B区开始;
第73-80列:识别区,程序员根据自身需求进行使用;
三、COBOL程序结构
每个完整的COBOL程序代码都是由四个部分组成的。依次为标志部、环境部、数据部、过程部;部与部之间的先后顺序不可改变;
标志部(Identification Division):
主要用来描述与程序本身相关的信息;
PROGRAM-ID:指明程序名,是必须具备的字段,长度在1-30之间,其他字段都是可选的;
AUTHOR:开发程序的程序员名;
INSTALLATION:通常指设计该程序的公司或者部门;
DATE-WRITTEN:指明程序编写或者修改的日期;
DATE-COMPILED:指明程序的编译的日期;
SECURITY:通常用于列出具有访问该程序权限的用户;
环境部(Environment Division):
环境部用来说明程序运行的软硬件环境,是COBOL程序中唯一与设备相关的部分,将程序用到的内部文件与外部的设备建立起来联系;紧跟标志部之后,没有可省略不写;
配置节:由"CONFIGURATION SECTION"标识:指定程序同外部环境之间的一些配置信息(可省略不写),由两个段组成:
①:源计算机(source computer):用于编译程序的系统;
②:对象计算机(object computer):用于执行程序的系统;
输入/输出节:由"Input-Output section"标识:指定程序中所用到的文件同外部环境之间的对应关系;
①:文件控制(file control):用于指定文件的对应关系,是该节点中主要用到的字段;
②:IO控制(I-O control):用于定义程序返回点,不同文件共享内存区,以及多文件卷中文件的位置;
数据部(Data Division):
用于定义程序中使用的变量,紧接环境部之后,它由四个节组成:
①:文件节(File section):用于对程序中用到的文件里的数据进行定义。文件指逻辑文件,其文件名必须和环境部输入/输出节中由select语句指定的文件名一致。
在文件节中,主要以FD(File Desciptor:文件描述符)语句实现对文件的定义。在FD语句下,通过PIC语句依次定义文件中每条记录所含的数据项;
任何在程序中所使用的文件都需要在此处定义;
FD语句以句点表示结束;
②:工作存储节(Working-Storage section):用于声明程序中使用的临时变量和文件结构;
③:本地存储节(Local-Storage section):类似于工作存储节,唯一的区别是每次程序开始执行时都会分配和初始化变量;
④:连接节(Linkage section):用来描述与调用程序间发生数据传递的数据项。(即参数)
过程部(Procedure Division):
编写程序要执行的语句,是程序的核心(至少有一条语句);逻辑处理部分都在过程部中,"STOP RUN"表明程序的结束!!!
四、COBOL主程序和子程序
1.主程序:调用其他程序的程序;
①:主程序过程部的部头:Procedure Division;
②:过程部中应该包括一个程序出口语句:"STOP RUN"(逻辑上最后一句语句);
③:程序最后标志结束语句,END PROGRAM 程序名(标记此行后再无程序语句);
2.子程序:被其他程序所调用的程序;
①:子程序过程部的头部:Procedure Division Using 从主程序接收到的参数名1,参数名2;
②:过程部中应该包括一个程序出口语句:Exit Proream(逻辑上最后一句语句);
子程序概述:Perfrom语句只能在同一程序中多次调用某一语句序列,如果被调用部分较复杂或需要被其他程序使用时,可以将其编写为一个单独的程序,即子程序,调用子程序的为主程序;
五、COBOL数据类型
Data Name(数据名称):数据名称必须在数据部中定义,然后再能在过程部中使用,自定义变量名称,不可以使用保留词。数据名为存储实际数据的存储单元提供引用,它们可以是基本数据类型或组类型;
Level Number(级数):级数用于指定记录中的数据级别,它们用于区分基本项和组项。基本项可以组合在一起创建组项;
Elementary items基本项目:不能进一步细分。级数、数据名称、图片子句、值子句(可选)用于描述基本项;
Group items组项目:由一个或者多个基本项目组成。级数、数据名称和值子句(可选)用于描述组项。组级数始终为01;
Picture Clause(图片子句):用于定义以下项目:
数据类型:可以是数据、字母、字母数字,数字类型仅由0-9组成,字母类型由字母A到Z和空格组成。字母数字类型由数字,字母和特殊字符组成;
符号:可以与数字数据一起使用,它可以是+或者-;
小数点位置:可与数字数据一起使用。假设位置是小数点位置,而不包括在数据中;
长度:定义数据项使用的字节数;
在图片子句中使用的符号:
Value Clause(值子句):值子句是一个可选子句,用于初始化数据项,该值可以是数字文字、字母数字文字、或象征常数。它可以与组项和基本项一起使用;
六、COBOL基本动词
COBOL基本动词用于过程部中的数据处理,每个语句总是以COBOL动词开头;
Input(输入)/Output(输出)动词:用于从用户获取数据,并显示COBOL程序的输出;
Accept动词:用于从操作系统或直接从用户获取诸如日期,时间,天等数据,如果程序从用户接收数据,那么就需要通过JCL传递,如果从操作系统获取数据时,则可直接使用“ACCEPT WS-DATE FROM SYSTEM-DATE”;
Display动词:用于显示COBOL程序的输出(个人理解:类似println);
Initialize动词:被用来初始化组项或基本项,数据名为Rename的子句不被初始化,数字数据项由Zeroes代替。字母数字或字母数据项由Spaces代替,如果我们包含Replacing术语,则数据项可被初始化为给定替换值;
Move动词:将数据从源数据复制到目标数据的,它可以用于基本和组数据项,使用Move Corresponding/Corr;
对于从字符串移动数据,则使用Move(x:l),其中x是起始位置,l是长度。如果目标数据项PIC子句少于源数据项PIC子句,则数据将被截断,如果目标数据项PIC子句多余源数据项PIC子句,则将额外添加的Zeros或Sapces字节;
Add(加法)动词:用于两个或多个数字相加,并将结果存储在目标运算对象中;
语法如下:
在语法句1中,A、B、C相加,结果存储在C中,A、B、D相加,结果存储在D中;
在语法句2中,A、B、C、D相加,结果存储在E中;
在语法句3中,WS-GROUP1和WS-GROUP2中的子组项相加,结果存储在WS-GROUP2中;
Subtract(减法)动词:减去动词用于减法运算;
在语法句1中,AB相加被C减去,结果存储在C中(C=C-(A+B)),AB相加被D减去,结果存储在D中(D=D-(A+B));
在语法句2中,ABC相加被D减去,结果存储在E中;
在语法句3中,WS-GROUP1和WS-GROUP2中的子组项相减,结果存储在WS-GROUP2中;
Multiply(乘法)动词:乘法动词用于乘法运算;
在语法句1中,A和B相乘,结果存储在B中(B=A*B),A和C相乘,结果存储在C中(C=A*C);
在语法句2中,A和B相乘,结果存储在E中(E=A*B);