cobol笔记.docx
- 文档编号:6429693
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:19
- 大小:26.68KB
cobol笔记.docx
《cobol笔记.docx》由会员分享,可在线阅读,更多相关《cobol笔记.docx(19页珍藏版)》请在冰豆网上搜索。
cobol笔记
.编码格式
•第1~6列为序号区,用于表示行号。
行号不是必须的,也不必是顺序的,甚至可以是本机字符集中的任意字符,但正确的行号是很重要的。
•第7列为指示区,可以包含如下指示符:
"*"指示本行内容为注释。
"-"指示本行代码为上一行的延续。
"D"指示本行代码为调试代码,将在启用DEBUGGING模式时被编译,未启用时将被忽略。
"/"指示编译器为源码列表开始新的一页,并且本行将被视为注释。
•第8~11列为A区。
下列项必须从A区开始:
部标题(DIVISION)
节标题(SECTION)
段名(段标题)
层指示符FD和SD,层号01和77
DECLARATIVES和ENDDECLARATIVES
ENDPROGRAM
•第12~72列为B区。
作为程序主体的条目(entries),句子(sentences),语句(statements),从句(clauses)和续行(/)等都必须从B区开始。
*句法说明:
节(SECTIONs)和段(paragraphs)定义了程序,它们又细分为以下部分:
条目(entries):
以句点(.)结尾的一系列从句。
构造于标识部、环境部和数据部。
从句(clauses):
连续的COBOL字符串的有序集合,用于指定条目的某个属性。
构造于标识部、环境部和数据部。
句子(sentences):
以句点(.)结尾的一个或多个语句的序列。
构造于过程部。
语句(statements):
指定程序要执行的某个动作。
构造于过程部。
短语(phrases):
构成从句和语句的更小单元。
2.基本结构
----|----1----|----2----|----3----|----4----|----5----|----6----|----7----|----8
//标识部
000001IDENTIFICATIONDIVISION.
000002PROGRAM-ID.PGMNAME.//指定本程序名。
此段是必须的,并且必须排在标识部的最前头。
//环境部
000003ENVIRONMENTDIVISION.
//配置节
000004CONFIGURATIONSECTION.
000005SOURCE-COMPUTER.IBM-PCWITHDEBUGGINGMODE.//WITH从句指定启用调试代码。
000006OBJECT-COMPUTER.IBM-PC.
000007SPECIAL-NAMES.
000008CURRENCY-SIGNIS$.//指定货币符号为"$"。
000009DECIMAL-POINTISCOMMA.//在PIC字符串或数字字面值中交换逗号","和小数点"."的功能。
//输入输出节
000010INPUT-OUTPUTSECTION.
000011FILE-CONTROL.//命名程序所用文件,并将其与外部文件相关联。
000012SELECTINPUT-FILEASSIGNTO"IN.DAT".
//数据部
000013DATADIVISION.
//文件节
000014FILESECTION.//定义数据文件的结构。
000015FDINPUT-FILE.//FileDescription.后面的文件名必须与前面SELECT语句中的一致。
00001601INPUT-RECORD-1PICX(100).//描述文件属性及与其关联的数据记录(可以是多个)。
00001701INPUT-RECORD-2//同一存储区域的另一种定义。
重定义INPUT-RECORD-1。
00001803ITEM-1PICX(20).
00001903ITEM-2PICX(80).
//工作存储节,描述程序处理过程中所涉及的不属于文件的数据记录。
//此存储区在运行单元开始时被分配,在运行单元结束时被销毁,在此过程中将保持其最后使用值。
000020WORKING-STORAGESECTION.
00002101WORK-FIELDPICX(20).
//连接节,用于被调用程序,描述从调用程序传递过来的数据。
000022LINKAGESECTION.
00002301LNK-FIELDPICX(10).
//过程部,被调用程序可以包含USING从句用于接收调用程序传递的参数数据,主调程序不需要。
000024PROCEDUREDIVISIONUSINGBYREFERENCELNK-FIELD.//BYREFERENCE是默认值,可以省略。
000025PGMNAME-STARTSECTION.//过程部处理逻辑的细分。
000026PERFORMP-PROC-1-RTN.
000027PERFORMP-PROC-2-RTN.
000028EXITPROGRAM.//返回调用程序(同GOBACK)。
000029P-PROC-1-RTNSECTION.
000030P-PROC-1.
000031DISPLAY"firstprogram:
".
000032P-PROC-1-EXT.
000033EXIT.//相当于CONTINUE,其后的任何语句都会被执行。
000034P-PROC-2-RTNSECTION.
000035P-PROC-2.
000036DISPLAY"HELLO,WORLD!
".
000037P-PROC-2-EXT.
000038EXIT.
----|----1----|----2----|----3----|----4----|----5----|----6----|----7----|----8
3.标识部(IDENTIFICATIONDIVISION)
PROGRAM-ID:
指定程序名,其后可以加上RECURSIVE从句,表示本程序可以被递归执行。
如
PROGRAM-ID.PGMNAMERECURSIVE.
RECURSIVE只能用于一个编译单元的最外层程序,该程序不能包含嵌套子程序。
4.环境部(ENVIRONMENTDIVISION)
配置节:
CONFIGURATIONSECTION描述程序编译和执行的计算机环境。
SOURCE-COMPUTER:
指定用于编译本程序的计算机系统名,由编译器厂商定义。
WITHDEBUGGINGMODE将启用调试代码,其中"WITH"可以省略。
OBJECT-COMPUTER:
指定用于运行本程序的计算机系统名。
输入输出节:
INPUT-OUTPUTSECTION可以包含两个段,FILE-CONTROL和I-O-CONTROL,后者不常用。
*文件说明:
可用的文件组织方式取决于所选用的数据存储设备:
•顺序存储设备(Sequential-onlyDevices):
终端、打印机、读卡器和打卡器被称为单元记录设备,因为它们一次只处理一行数据,所以在程序中读写此类设备时,也必须按顺序一次处理一条记录。
磁带上的记录是顺序排列的,在程序中也必须顺序处理。
处理磁带文件时使用QSAM物理顺序文件。
磁带记录可以是定长或变长的,其数据传输速率比卡片快。
•直接存取存储设备(Direct-AccessStorageDevices,DASDs):
此类设备提供了更大的灵活性,可以使用多种文件组织方式——Sequential(VSAMorQSAM),Linesequential(UNIX),Indexed(VSAM),Relative(VSAM)。
在用于z/OS和OS/390系统的IBMEnterpriseCOBOL上,向操作系统作出的对输入输出设备数据记录的存储和检索请求,由两种存取方式——QSAM和VSAM,及UNIX文件系统来处理。
•QSAM(QueuedSequentialAccessMethod):
没有键的文件,其中的记录按输入顺序一条接一条排列。
程序只能顺序处理这类文件,按照记录在文件中的顺序来检索它们。
记录被创建后,不能改变其长度和在文件中的位置,也不能删除它,但可以用REWRITE更新DASDs上的QSAM文件。
QSAM文件可以放在顺序存储设备和直接存取存储设备(DASDs)上。
•VSAM(VirtualStorageAccessMethod):
用于DASDs上的文件的存取方式。
此方式可以——加载文件、从文件中检索记录、更新文件、增加/替换/删除文件中的记录。
VSAM相比QSAM有如下优势:
保护数据免于未授权的访问,跨系统兼容性,独立于设备,更简洁的JCL,能使用INDEXED和RELATIVE文件组织方式。
FILE-CONTROL:
将程序中的每个逻辑文件与外部数据集联系起来,并指定文件的组织、存取方式及其他信息。
可包含如下语句:
([]中的词是可选的)
SELECT[OPTIONAL]INFILEASSIGN[TO]"FILE.DAT"
ORGANIZATION[IS]*
ACCESS[MODE][IS]*
RECORD/RELATIVE[KEY][IS]*
ALTERNATE[RECORD][KEY][IS]*[[WITH]DUPLICATES]
[FILE]STATUS[IS]DATANAME1DATANAME2.
INFILE是程序中使用的逻辑文件名,它必须在数据部文件节的FD或SD条目中被描述。
FILE.DAT可以是操作系统下的物理文件,也可以是记号名(如DD名或环境变量),可在之后利用运行时选项为其指定实际的物理文件。
OPTIONAL表示此文件不一定每次运行时都会存在。
当以只读(INPUT)或读写(I-O)方式打开此文件时,如果文件不存在,将自动创建此文件。
在没有OPTIONAL限定时,读取不存在的文件会报错。
ORGANIZATION指定文件的逻辑结构:
•SEQUENTIAL:
记录的次序由其在文件中的物理顺序决定,记录可以是定长或变长的,它们没有键(key)。
如果省略ORGANIZATION从句,编译器将默认文件为本类型。
•INDEXED:
记录的位置由随文件而建立并由系统所维护的索引来确定,索引建立在位于文件记录中的键(key)上。
每条记录都必须包含有一个作为主键(primarykey)的项目,并由RECORDKEY从句来声明。
此类文件必须是DASDs上的文件,记录可以是定长或变长的。
•RELATIVE:
记录根据其相对于文件开头的位置来决定,文件中第1条记录的相对记录号为1,第10条记录的相对记录号为10,依次类推。
此类文件必须是DASDs上的文件,记录可以是定长或变长的。
•LINESEQUENTIAL:
记录的次序由其在文件中的物理顺序决定。
每条记录以一个分隔符(换行符)结尾,分隔符不算在记录长度内。
记录写入时,尾部的空格都被删除,然后加上分隔符再写入文件。
记录读取时,如果读取的长度小于记录存储区的长度,尾部的分隔符被舍弃,剩余长度以空格填满;如果读取的长度大于记录存储区的长度,在读满记录存储区后,剩余字符将成为下一次读取的内容。
每条记录只能包含可打印字符及如下控制字符:
警报(X'2F')、退格(X'16')、换页(X'0C')、换行(X'15')、回车(X'0D')、水平制表符(X'05')、垂直制表符(X'0B')、DBCS(DoubleByteCharacterSet)shift-out(X'0E')、DBCSshift-in(X'0F'),其中换行符被当作分隔符,其它字符被当作文件记录的数据。
ACCESSMODE指定文件中的记录以何种方式可用:
•SEQUENTIAL:
可用于上述任一ORGANIZATION的文件。
对于SEQUENTIAL和LINESEQUENTIAL文件,记录按照物理顺序(即记录原先被写入文件的顺序)读写;对于INDEXED文件,记录按照键值的升序读写;对于RELATIVE文件,记录按其相对记录号的升序读写。
如果省略ACCESS从句,将默认为本方式。
•RANDOM:
只能用于INDEXED和RELATIVE文件。
由索引键值/相对键值指定所读写的记录,一次存取一条。
•DYNAMIC:
只能用于INDEXED和RELATIVE文件。
纪录可按上述两种方式读写,取决于所用输入输出语句的具体形式。
RECORDKEY用于指定INDEXED文件记录中用作主键的项目。
对于不同的记录,主键的值必须是唯一的。
RELATIVEKEY确立一个数据名,用来为RELATIVE文件的记录指定相对记录号。
它不能是数据记录的一部分,必须被定义为无符号整型,且不能包含PICTURE符号"P"。
ALTERNATERECORDKEY替换关键字是可选的,它提供了存取INDEXED文件的另一途径。
当指定了DUPLICATES时,替换关键字的值对于不同记录必须是唯一的,如果没有指定DUPLICATES,其值可以有重复。
对于顺序存取方式,具有相同键值的记录按其被输入文件的顺序来读写;对于随机存取方式,只有第一条记录可以被检索到。
FILESTATUS监视文件每一次输入输出操作的执行。
在每一次涉及此文件的显式的或隐式的输入输出操作之后,系统都会给由FILESTATUS指定的项目设定一个值。
•DATANAME1可以在WORKINGSTORAGESECTION、LOCALSTORAGESECTION或LINKAGESECTION中定义。
它可以是2个字符的英数字或NATIONAL类别,也可以是USAGEDISPLAY或USAGENATIONAL的2位的数字类别,且不能包含PICTURE符号"P"。
•DATANAME2必须在WORKINGSTORAGESECTION或LINKAGESECTION中定义为一个拥有6个字节的英数字型组合项。
只有VSAM文件需要指定DATANAME2,它用来接收6字节的VSAM返回码。
当VSAM返回码非0时,DATANAME2被设定。
当DATANAME1的值为0时,DATANAME2的值是未定义的。
I-O-CONTROL:
此段在COBOL程序中是可选的,用于指定程序的重新运行点和不同文件共享的内存区等。
由于此段很少使用,无需详细了解。
5.数据部(DATADIVISION)
数据部以结构化的方式描述程序中处理的所有数据。
文件节:
FILESECTION描述数据文件的结构。
对于SORT/MERGE文件,必须包含一个SD描述项,对于其它文件,必须包含一个FD描述项。
FILESECTION.
FDFILE-NAME
[IS]EXTERNAL
[IS]GLOBAL
BLOCK[CONTAINS]INT-1[TOINT-2]CHARACTERS/RECORDS
RECORD[CONTAINS]INT-3[TOINT-4][CHARACTERS]
RECORDISVARYINGINSIZE[FROM]INT-5TOINT-6CHARACTERSDEPENDING[ON]INT-7
01FILE-RECORD.
03*.
...
FILE-NAME必须与环境部相应的SELECT从句指定的名字一致。
其后的从句都是可选可任意排列的。
EXTERNAL表明FILE-NAME是外部的。
外部文件名能让两个程序通过共享文件来通信,此文件的存储区是与整个运行单元关联的,而不是只与其中某个程序关联。
GOLBAL表明FILE-NAME是全局的。
全局文件名对声明它的程序以及直接或间接包含于该程序的每个程序都是可用的。
BLOCKCONTAINS指定物理记录的长度。
INT-1和INT-2必须为非0无符号整数,它包括物理记录中任意的控制字节和填充内容(逻辑记录不包括填充内容)。
如果记录不是分块的,此句可以省略。
CHARACTERS用来指定一条物理记录所包含的字节数,它是默认的。
RECORDS用来指定一条物理记录所包含的逻辑记录数。
RECORD指定用于存储每条记录的字节数。
INT-3单独使用时用于定长记录;INT-3和INT-4一起使用时可用于定长或变长记录,但这种形式在任何情况下都不是必须的。
当一个文件的所有01层描述项都具有相同的长度时,将得到定长记录。
INT-7必须是无符号整型数据项。
工作存储节:
WORKING-STORAGESECTION描述不属于数据文件的数据记录,它也用于描述在源程序中被赋值并在目标文件的执行过程中保持值不变的数据项。
连接节:
LINKAGESECTION用于被调用程序,描述从调用程序传递过来的参数数据。
6.过程部(PROCEDUREDIVISION)
过程部包含程序要执行的所有语句,包括可选的DECLARATIVES和节、段、语句等。
过程部的部头格式为:
PROCEDUREDIVISION[USING[[BY]REFERENCE/VALUE]DATA-1...][RETURNINGDATA-2].
USING短语用于子程序,指定程序被调用时所接收的参数。
DATA-1...必须是LINKAGESECTION中定义为01层或77层的数据项,但在调用程序的CALL语句的USING短语中指定的数据项可以是其数据部中定义的任意层的数据项。
DATA-1...的数据描述项中可以包含REDEFINES从句。
可以从非COBOL程序CALLCOBOL程序,或者从系统命令向COBOL主程序传递用户参数。
调用程序与子程序的USING短语中的标识符是按位置而不是名字来对应的,相应的标识符必须包含相同的字节数,尽管它们的数据描述不必相同。
BYREFERENCE和BYVALUE短语作用于其后的所有参数,直到出现另一个此短语。
RETURNING短语指定一个用于接收程序结果的数据项,这是一个输出参数。
DATA-2必须是LINKAGESECTION中定义为01层或77层的数据项。
此短语不能用于包含ENTRY语句的程序、嵌套程序和主程序。
过程部的结束由以下之一标识:
•碰到嵌套程序的标识部部头。
•ENDPROGRAM记号。
•到达程序的尾部,后面再没有任何代码行了。
7.数据描述
程序中所有数据间的关系在数据部中通过层指示符和层号来定义。
层指示符(levelindicator)和其描述条目一起指定了程序中的每个文件。
FD是文件描述的层指示符,SD是sort-merge文件描述的层指示符。
层号(level-number)和其描述条目一起指定了具体数据的属性。
层号包括范围[01,49]中的一位或两位整数,以及3个特殊层号:
66、77、88。
基本数据项(elementaryitems)是数据的基本划分。
组数据项(groupitems)是基本数据项的组合。
组还可以组合成包含一个或多个子组的更大的组。
不带GROUP-USAGE从句的组是英数字型的组,无论其所包含的基本数据项是如何表示的。
GROUP-USAGE的用法为:
GROUP-USAGE[IS]NATIONAL.
每个组数据项和基本数据项都是一个单独的条目,都必须被赋予一个层号。
•01:
它是最高层,必须从A区开始。
可以是英数字型组数据项、NATIONAL组数据项或基本数据项。
•02~49:
可以从A区或B区开始。
层次越低的数据项被赋予越大的层号,它们之间不必是连续的。
•66:
必须包含一个RENAMES从句,用于重新编制前面已定义的数据项。
格式:
66DATA-1RENAMESDATA-2[THROUGH/THRUDATA-3].
例1-------------------------------
01RECORD-I
05DN-1....
05DN-2....
05DN-3....
05DN-4....
66DN-6RENAMESDN-1THROUGHDN-3.
图示:
│DN-1│DN-2│DN-3│DN-4│
┕━━━DN-6━━━┙
例2-------------------------------
01RECORD-II
05DN-1....
10DN-2....
10DN-2A....
05DN-1AREDEFINESDN-1.
10DN-3A....
10DN-3....
10DN-3B....
05DN-5....
66DN-6RENAMESDN-2THROUGHDN-3.
图示:
┍━━━DN-1━━━━┑
│DN-2│DN-2A│DN-5│
┍━━━DN-1A━━━━┑
│DN-3A│DN-3│DN-3B│
┕━━DN-6━━┙
•77:
必须从A区开始。
用于标识工作存储节或连接节中的一个独立的数据描述条目。
它不是其它项目的细分项,本身也不能细分。
•88:
标识与条件变量的某个特定值相关的条件名。
01AGE-GROUPPIC99.//条件变量(conditionalvariable)
88INFANTVALUE0.//条件名(conditionname),下同
88BABYVALUE1,2.
88CHILDVALUE3THRU12.
88TEENAGERVALUE13THRU19.
用法:
IFINFANT//如果AGE-GROUP的值为0
...//执行语句
数据分类:
Class
Category
Usage
Alphabetic
Alphabetic
DISPLAY
Alphanumeric
Alphanumeric
DISPLAY
Alphanumeric-edited
DISPLAY
Numeric-edited
DISPLAY
DBCS
DBCS
DISPLAY-1
National
National
NATIONAL
National-edited
NATIONAL
Numeric-edited
NATIONAL
Numeric
Numeric
DISPLAY(typezoneddecimal)
NATIONAL(typenationaldecimal)
PACKED-DECIMAL(typeinternaldecimal)
COMP-3(typeinternaldecimal)
BINARY
COMP
COMP-4
COMP-5
Internalfloating-point
COMP-1
COMP-2
Externalfloating-point
DISPLAY
NATIONAL
数据对齐规则:
数据在基本数据项中的对齐标准取决于接收它的数据项的类型。
•数字型(numeric):
按假定的小数点对齐,如果需要,会发生截断或以0填充。
如果没有显式地指定小数点,则认为小数点紧接在字段的最右边。
•数字编辑型(numeric-edited):
按小数点对齐,如果需要,会在任意一端发生截断或以0填充。
•内部浮点数(internalfloating-point):
小数点被假定紧接在字段的最左边,数据向左对齐,指数被相应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cobol 笔记