cobol语法Word文件下载.docx
《cobol语法Word文件下载.docx》由会员分享,可在线阅读,更多相关《cobol语法Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
![cobol语法Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/5/35007572-4279-43b8-84e3-85eaf6da49ee/35007572-4279-43b8-84e3-85eaf6da49ee1.gif)
文件描述符
FD
COBOL每个句子后要加句号“.”
象IF
ELSE
END-IF.要在END-IF后面加句号,中间不加。
不区分大小写
运算符和等号左右两边留空格。
()左右两边留空格。
表意常量(又称字义常量,象征常数或赋形常数。
FigurativeConstant)
它用某些英文字(保留字)来代表某些特定的常值。
如用ZERO代表数值0,用SPACE代表空格。
从这些字的意思可以知道它们所代表的是什么值,因此叫表意常量或字义常量。
二者等价
MOVEZEROTOA
MOVE0TOA
表意常量
所代表的值
ZREO
ZEROS
ZEROES
表示一个或多个零字符
SPACE
SPACES
表示一个或多个空格字符
HIGH-VALUE
HIGH-VALUES
表示一个或多个具有“最高值”的字符(每个字符的二进制表示为11111111)
LOW-VALUE
LOW-VALUES
表示一个或多个具有“最高值”的字符(每个字符的二进制表示为00000000)
QUOTE
QUOTES
表示一个或多个引号字符
ALL常量
表示由一个或多个该常量组成的字符串
表意常量可以出现在程序中使用数值常量或非数值常量的地方。
读者仔细阅读表1.2所列举的用法举例,就可清楚表意常量的作用。
指令
假定已定义A在内存中的字节数
执行MOVE指令后A中的值
MOVEZEROTOA
MOVEZEROS(或ZEROES)TOA
4
1
0000(每个字节中均存放字符0)
0000
MOVESPACETOA
(四个空格)
(一个空格)
MOVEHIGH-VALUETOA
在4个字节中全部二进位上值为1,即每个字节中均为二进制的11111111
MOVELOW-VALUETOA
每一个字节中均为二进制的00000000
MOVEQUOTETOA
′′′′
MOVEALL‘*’TOA
MOVEALL‘AB’TOA
MOVEALL‘ABC’TOA
5
****
ABAB
ABCAB
第二章标识部和环境部
标识部IDENTIFICATIONDIVISION是程序不可缺少的部分,
以下必写内容:
IDENTIFICATIONDIVISION.
PROGRAM-ID.程序名.
任选部分:
AUTHOR.作者姓名.
INSTALLATION.计算机设置的场所.
DATE-WRITTEN.源程序编写的日期.
DATE-COMPILED.源程序编译的日期.
SECURITY.保密程度.
例子:
IDENTIFICATIONDIVISION.(标识部分)
PROFRAM-ID.EX.(程序名:
EX)
AUTHOR.ZHANG-LI.(作者:
张利)
INSTALLATION.TSINGHUAUNIVERSITY.(编写的场所:
清华大学)
DATE-WRITTEN.1992/5/30.(编写日期:
1992年5月30日)
DATE-COMPILED.1992/6/5.(编译日期:
1992年6月5日)
SECURITY.THISPROGRAMRESTRICTEDTOPERSONNELWHOHAVEBEEN
CLEAREDBYTHECONTROLLER’SOFFICE.
(保密:
此程序仅限于已被检查人员审查通过的人使用)
环境部ENVIRONMENTDIVISION
环境部的作用是说明程序运行的环境,即程序是在什么软硬件环境下运行的。
这是整个COBOL程序中唯一与计算机硬件设备有关的部分。
在这部分中要说明程序用到哪些设备,哪些文件,将程序中用到的内部文件名与外部文件(或外部设备)之间建立起联系。
前面已说过,COBOL将外部设备和外部文件只集中出现在环境部,是为了提高程序的可移植性,不致因外部环境的改变而导致程序中每一部分都需要作相应的修改,而只需要修改环境部即可。
环境部的一般格式
ENVIRONMENTDIVISION.(环境部)
CONFIGURATIONSECTION.(配置部)
SOURCE-COMPUTER.源计算机名.
OBJECT-COMPUTER.目标计算机名.
[SPECIAL-NAMES.专用名描述项]
[INPUT-OUTPUTSECTION.(输入输出节)
FILE-CONTROL.{文件控制描述体}…
[I-O-CONTROL.输入输出控制描述体]]
可以看出:
(一)
环境部
环境部分包括两个节:
配置节(CONFIGURATIONSECTION)
输入输出节(INPUT-OUTPUTSECTION)
(二)COBOL要求,配置节(CONFIGURATIONSECTION)是必须写的。
但不少计算机允许可以不必写配置节(包括节头和源计算机名段以及目标计算机段)。
因此在本书中为使程序简练写,往往把这一部分省略了。
(三)输入输出节按规定是任选的,但只有最简单的程序(用ACCEPT语句和DISPLAY语句进行输入和输出少量数据)才不用输入输出节。
只要使用文件进行输入或输出的,都应在环境部中写出输入输出节。
下面分别介绍环境部中各节的内容:
配置节(CONFIGURATIONSECTION)
(一)本节包括三段:
源计算机段﹑目标计算机段﹑专用名段。
下面为这节的具体用法:
CONFIGUARATIONSECTION.(配置节)
SOURCE-COMPUTER.IBMPC-386.(源计算机段)
OBJECT-COMPUTER.IBMPC-386.(目标计算机段)
MEMORSIZEIS5000WORDS.
SPECIAL-NAMES.(专用名段)
CONSOLEISA1.
它说明源程序是在IBMPC-386计算机上编译的。
源计算机指的是编译源程序时使用的计算机。
目标计算机指的是经过编译后所得的目标程序运行时所使用的计算机,即数据处理阶段所使用的计算机,本例中目标计算机也是IBMPC-386。
这二者可以是同一计算机,也可以是不同的计算机。
如果是不同的计算机,则应要求这二台计算机是兼容的。
因为一种型号的计算机编译出的目标程序,在另一型号的计算机上往往是不能运行的。
在配置节中还应说明程序运行时需要目标计算机提供的最小容量。
此例中说明该目标程序运行是将要占用内存大约5000字左右。
如果目标计算机所提供的能使用的内存容量小于此数字,则程序不能正常运行。
第五六行为“专用名段”,说明CONSOLE(某计算机系统指定的“控制台”的专用名)在本程序中可以用A1(注忆名)来代表。
(二)源计算机段和目标计算机段的一般格式
SOURCE-COMPUTER.源计算机名.
OBJECT-COMPUTER.目标计算机名.
WORDS
MEMORYSIZEIS整数CHARACTERS
MODULES
对内存大小的说明,可以用CHARACTERS(字符),或WORDS(字),或MODULES(模块)之一。
(三)专用名段。
专用名段用来通知系统把系统中原规定的一些设备名或功能名或符号改为用户自己指定的名字或符号。
计算机对有关的硬设备和某些功能(如打印时不换行,跳到本页末或下页头等),都赋予一个特定的专用名。
例如有的系统把打印机定名为PRINTER,把控制台定名为CONSOLE,有的把宽行打印机定为SYSOUT,把读卡机定为SYSIN等(请注意,每个系统所起的专用名是不同的,不可照搬,使用时应弄清楚本系统各硬设备的专用名是什么)。
程序编写者可以用自己规定的助忆名去代替系统的专用名。
如果程序中不规定自己定的助忆名,则此段可不写。
欧洲人的习惯是用逗号代表小数点,如12.34,他们写成12,34。
对此COBOL提供一项说明,可在专用名段中写:
DECIMAL-POINTISCOMMA.(小数点是逗号)
这样,凡程序中数值内出现的小数点,在输出时一律会自动改成逗号。
又如,美国用“$”作货币符号,而其他国家可以改用其他符号,如用“L”表示英镑,用“¥”表示人民币等。
可在专用名段写:
CURRENCYSIGNIS非数值常量
如:
CURRENCYSIGNIS‘L’.
则在出现货币符号时,一律会自动以“L”代替“$”。
但不能用0-9,A,B,C,D,E,P,R,S,V,X,Z字符作货币号。
专用名段的一般格式(在配置段中)
SPECIAL-NAMES.
[DECIMAL-POINTISCOMMA.]
[CURRENCYSIGNIS非数值常量.]
[专用名IS助忆名.]
使用助忆名代替系统固有的专用名,纯粹是为了便于记忆。
因为在有些系统中专用名不好记忆,程序编制者希望以简单易记的名字代替它。
此外,当改用其它计算机系统时,只需要改变专用名段的专用名即可,程序中过程部的所有语句都不必改动。
输入输出节(INPUT-OUTPUTSECTION)
(一)程序中如果用到输入输出文件,就应在这个节中把程序中的内部文件与外部文件(包括外部设备)联系起来。
输入输出节
输入输出节包括两个段:
文件控制段(FILE-C.ONTROL.)
输入输出控制段(I-O-CONTROL.)
文件控制段是为文件分配外部文件。
只要用到INPUT-OUTPUT节,文件控制段就是必写的。
输入输出控制段的作用是可以指定目标程序运行时,几个文件共用一个内存区,以省内存。
(二)环境部的重要部分。
它的主要功能是给程序中使用的文件命名。
指出存放该文件的外部设备及其它有关文件控制的信息。
程序中只要用到了文件,则必须有一个对该文件的描述部分,它是由SELECT子句实现的。
文件控制段的一般格式:
INPUT-OUTPUTSECTION.(输入输出节)
FILE-CONTROL.(文件控制段)
SELECT文件名ASSIGNTO外部文件名.
(三)说明
1.紧跟SELECT后面定义的文件名是指源程序中用到的内部数据文件名(在数据部中定义),COBOL程序中的READ,OPEN等语句都是用该文件名进行操作的。
2.在本书第二章§
2.2中的2.2.3段(READ语句)中我们已说明了在环境部中用SELECT子句将内部文件名与外部文件名联系起来。
外部设备也视作一种外部文件。
但应注意,在不同的计算机系统中,如何表示“外部文件名”的方法是不同的,大体有以下三种方法:
(1)SELECT子句的“ASSIGNTO”的后面写上磁盘上实际的文件名。
例如在小型机VAX系列机上的用法如下:
FILECONTROL.
SELECTFILE1ASSIGNTODUA1:
COB.FILE1.DAT.
内部文件名为“FILE1”,外部文件名为“DUA1:
COB.FILE1.DAT”,它表示在磁盘DUA1的COB子目录下的FILE1.DAT文件。
在使用磁盘文件时应当了解“目录”的概念。
在使用磁盘时,为了使用和管理的方便,往往将磁盘分为若干部分,每一个用户只能在指定的部分内存储和操作自己的文件,例如规定A1用户使用的部分为A1区,A2用户用A2区…。
这样做可以防止用户误操作不属于他的文件,例如A1不能使用A2的文件。
这种划分的各部分便称为“子目录”,例如A1子目录,A2子目录…。
在A1子目录下的FILE.DAT文件就表示为A1.FILE.DAT(在IBM-PC的DOS操作系统下,表示为A1\FILE.DAT)。
子目录下还可以有子目录,例如在A1子目录下又可以设立A11子目录,A12子目录…等,在A11子目录下的FILE.DAT文件表示为A1.A11.FILE.DAT(在DOS操作系统下表示为A1\A11\FILE.DAT)。
这种管理方法如同一本书的目录一样,分为章﹑节﹑段,一层一层,互相区别开,便于查阅,所以称为“目录”。
有些文件不放在子目录下而直接处于“根目录”管理下,调用文件时就不必写出子目录名,例如只需要写“DUA1:
FILE.DAT”即可。
小型机多为多用户系统,在使用计算机时,系统管理员已为每一个用户分配了所用磁盘空间和子目录,用户的源程序和所用的数据文件一般都放在这个子目录中。
调用本子目录中的文件就不必写子目录名。
例如在子目录COB下运行的程序需要从这个子目录中的FILE.DAT中读入文件,可以不必写子目录名“COB”。
例如下面两行等价:
SELECTFILE1ASSIGNTODUA1:
COB.FILE.DAT.
FILE.DAT.
但如果要从另一个子目录A1下的FILE.DAT文件读入数据,则必须写出该子目录名:
A1.FILE.DAT.
数据文件的后缀一般用“DAT”。
系统规定,当用“DAT”作数据文件的后缀(扩展名)时,“.DAT”可以省略不写。
例如,可写成:
FILE.
也就是说,当文件名不带后缀“DAT”时,系统会自动加上“.DAT”而找寻:
“FILE.DAT”文件。
第三章数据部分
数据部的结构DATADIVISION
文件节(FILESECTION)
用来描述程序中用到的输入输出文件及其记录中各数据项的属性。
工作单元节(WOKING-STORAGESECTION)
用来描述程序中用到的中间数据项。
联系节(LINKAGE-SECTION)
用来描述与调用程序间发生数据传递的数据项。
报表节(REPORTSECTION)
为了完成报表编辑功能,此节用来规定欲输出的报表的“体裁”,设计各报表栏的打印形式和方法等。
文件节是程序中输入或输出的描述部分。
文件描述符FD文件名(文件名是在环境部中输入输出节中定义的)
描述内容包括:
1.文件名和文件属性
2.文件中包括的记录和名字
3.每个记录中的数据层次关系
4.记录中各数据项的数据形式和占内存的大小
文件描述体的格式:
FD文件名.
LABEL
RECORDISSTANDARD——标号记录是标准的磁盘(带)文件
RECORDSAREOMITTED——标号记录是省略的卡片文件,打印文件
数据名
DATA
RECORDIS
RECORDSARE
带有COPY(拷贝文)的格式
FD文件名对应的外部文件
COPY拷贝文件名[REPLACING==拷贝文中的数据层名==BY==程序中用名==]
数据部的层次
数据的层次结构是:
记录->
组合项->
初等项(即逻辑上不能再细分的项)
例NAME(初等项)
WORKER-NUMBER(初等项)
MONTH(初等项)
TIME-RECORDWEEKS-END-DATEDAY-NUMBER(初等项)
(记录名)(组合项)YEAR(初等项)
HOURS-WORKEDREGULAR(初等项)
(组合项)OVERTIME(初等项)
层次关系如下:
01TIME-RECORD.
03NAMEPICX(20).
03WORKER-NUMBERPIC9(6).
03WEEKS-END-DATE.
05MONTHPIC99.
05DAY-NUMBERPIC99.
05YEARPIC99.
03HOURS-WORKED.
06REGULARPIC99.
06OVERTIMEPIC99.
PIC子句小结
字型子句(PIC子句)即PICTURE的缩写。
PIC子句用来描述每一个初等数据项。
(一)PIC子句用来说明数据的类型和长度。
PIC子句的一般格式为:
IS描述字符串
PICTURE
PIC
PIC子句只能用来描述初等数据项。
(二)每一种类型数据可以使用的描述字符如下:
数据类型
在PIC子句中允许使用的描述字符
数值数据项
9VSP
字母数据项
A
字符数据项
9AX
编辑数值数据项
9PV.,BZ+―$*0CRDB
编辑字符数据项
AX9B0
注:
数值型数据项还可以用“外部浮点形式”描述,详见第七章(下册)
(三)描述字符的含义
描述字符
含义
9
表示一个数字位置
表示一个字母位置
X
表示一个字符位置
V
表示隐含的小数点位置
S
表示数值数据带符号
P
表示十进比例换算,即指明落在数据域外的十进小数点位置
$
插入货币符号位置
.
插入小数点位置
插入逗号位置
+
一律加符号
―
对负数加负号,对正数前留一空格
Z
取消高位零,代以空格
*
取消高位零,代以*
B
插入空格的位置
插入零的位置
DB(借方)
数据为负时,在数据后面出现DB,数据为正时,数据后空两格
CR(借方)
数据为负时,数据后出现CR,数据为正时,数据后空两格
工作单元节(WORKING-STORAGESECTION)
用于描述非输入输出的数据、中间变量、中间结果等数据项。
利用工作单元节为某些数据赋以初值(VALUE)
数据项两种
孤立数据项(初等项)77作层号
组合项层号用01~49
第四章过程部PROCEDUREDIVISION
过程部是程序的核心部分,它决定计算机应进行什么操作。
过程部的语句都是以一个动词开头(如MOVE,OPEN,READ,WRITE,IF等)
输入输出语句:
ACCEPT接受语句:
直接从终端键盘或系统指定的输入设备上输入少量的数据。
ACCEPT标识符[FROM助忆名]
标识符:
即唯一标识一个数据项的数据名。
助忆名:
即在环境部说明,与外部设备相联系。
DISPLAY显示语句:
将少量数据从计算机内存中输入到某一指定的外设上
DISPLAY
标识符1
…[UPON助忆名]
常量1
READ读语句:
从外部文件读入数据。
READ文件名.
文件名:
即环境部定义的对应外部文件名的内部文件名。
WRITE写语句:
将数据写到外部介质上形成输出文件。
WRITE记录名[FROM标识符1]
标识符2LINE
ADVANCING
BEFORE整数LINES
AFTER助忆名
PAGE
OPEN打开语句
OPEN
INPUT文件名1
OUTPUT文件名2
CLOSE关闭语句
CLOSE文件名1[文件名2…]
ADD加法语句
ADDATOB表示A+BBB只是被加数,参加运算
ADDA,CGIVINGB表示A+CBB不是被加数,不参加运算
SUBSTRACT减法语句
SBUSTRACTBFROMA表示A-BA
MULTIPLY乘法语句
MULTIPLYABYB表示A*BB
DIVIDE除法语句
DIVIDEAINTOB表示B/AB
COMPUTE计算语句
COMPUTEA-(B+C)*D/E
MOVE传送语句
MOVEATOB表示将A值传送给B
GOTOGOTO语句
只能转移到段或节的开头
IF条件语句
IF条件语句组1
ELSE语句组2
END-IF.
STOP停止语句
STOP
RUN——停止运行
常量——表示程序暂时挂起不往下执行显示此常量
PERPORM执行语句
PERFORM过程名—>
过程部中的节名段名
PERFORM过程名UNTIL条件
USAGE用法子句
定义数据在内存中的存放形式
[USAGEIS]
DISPLAY
COMP
DISPLY标准数据形式一个字节放一个字符
COMP定点二进制形式
只适用于数值型
COMP-1内部短浮点形式
COMP-2内部长浮点形式
COMP-3内部十进制形式
COPYCOPY语句
在COBOL程序中DATADIVISION部分往往是很长的,包括许多数据项的描述,利用COPY语句使某些记录描述和数据描述为不同的程序共用,为此建立源程序库
格式:
标识符1标识符2
COPY库名REPLACING常量1BY常量2……
字1字2
在数据部中COPY语句书写形式:
1.在文件节中
FD文件名COPY语句.
SD排序文件名COPY语句.
01数据名COPY语句.
2.在工作单元节和联接节中
77数据名COPY语句.
01数据名COPY语句.
77数据名1REDEFINES数据名2COPY语句.
01数据名1REDEFINES数据名2COPY语句.
3.在报表节中
RD报表名COPY语句.
第五章子程序
子程序调用
CALL子程序名[USING数据名1[,数据名2]……]
被调用程序中过程部部头
PROCEDUREDIVISION[SUING数据名1[,数据名2]……]
使用USING语句进行主程序和子程序的参数传递。
子程序名:
是在标识部中说明的子程序名。
若