COBOL文件操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
COBOL文件操作
要在COBOL中使用文件,要在3个不同的部中放上信息。
环境部,要有程序使用的每个文件的文件控制项目(FILE-CONTROL)。这个项目将程序中使用的文件名与程序外的实际文件联系起来。这些项目还定义文件的组织和访问方式。
数据部,要有每个文件的文件描述符(FD)项目,就是数据定义。
过程部,放上处理语句,OPEN,READ,WRITE,DELETE等。
环境部中主要是FILE-CONTROL和I-O-CONTROL.I-O-CONTROL很少使用。
SELECT[OPTIONAL]file-name ASSIGN TO DEV/FILE
[RESERVE N[AREA/AREAS]]
[FILE STATUS IS VAR]
SELECT必须是第一句,其他顺序无关。file-name是程序中传递使用的文件名,相当于实际文件的一个别名。OPTIONAL用于执行可能不存在的文件。
ASSIGN将file-name连接到实际的外部设备或文件。(TO好像可以省略。)
RESERVE指定文件缓冲区。
FILE STATUS指定一个变量存放文件状态,这个变量应该已在WORKING-STORAGE SECTION中定义。
对于顺序文件,还有声明如下:
[ORGANIZATION IS SEQUENTIAL]可选,缺省为顺序组织文件
[ACCESS MODE IS SEQUENTIAL]可选。顺序文件只允许顺序访问
[PADDING CHARACTER IS char]指定文件在固定块长设备上时键块所用的字符,char为一个字符的数据项。
[RECORD DELIMITER IS STANDARD/usr-define]指定如何确定变长纪录的长度。
顺序文件例子:
SELECT file-name ASSIGN TO"/usr/file1"
FILE STATUS IS file-status
对于相对文件,还有声明如下:
[ORGANIZATION IS RELATIVE]是相对文件必须的
[ACCESS MODE IS SEQUENTIAL[RELATIVE KEY IS data]]或者
[ACCESS MODE IS RANDOM/DYNAMIC RELATIVE KEY IS data]
访问方式有3种,缺省是SEQUENTIAL。
RELATIVE KEY可选。如果存在,则文件读取操作顺利完成后,data用所读取纪录的关键字更新。data应为文件的纪录区中没有的整数数据项。
相对文件的例子:
SELECT file-name ASSIGN TO"/usr/file2"
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC RELATIVE KEY IS DAY-NUMBER
FILE STATUS IS file-status
对于索引文件,还有声明如下:
[ORGANIZATION IS INDEXED]是索引文件必须的
[ACCESS MODE IS SEQUENTIAL/RANDOM/DYNAMIC]RECORD KEY IS data1
[ALTERNATE RECORD KEY IS data2[WITH DUPLICATES]]
访问方式有3种,缺省是SEQUENTIAL。
RECORD KEY指定文件的主纪录关键字,data1应为定义该文件的某个记录区的字母数字数据项目。这个关键字的描述及其在数据记录中的位置应该与生成文件时所用的关键字一致。
ALTERNATE RECORD KEY如果文件有替换关键字,则其关键字用这个从句的短语指定,索引中允许重复关键字时采用DUPLICATES.COBOL要求文件记录中定义data2。重复关键字的长度及其在数据记录中的位置应该与生成文件时一致,所有替换关键字应放在文件控制项中。
索引文件的例子:
SELECT file-name ASSIGN TO"/usr/file3"
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS NUMBER OF EMPLOYEE-RECORD
ALTERNATE RECORD KEY IS LAST-NAME OF EMPLOYEE-RECORD WITH DUPLICATES
ALTERNATE RECORD KEY IS SS-NUMBER OF EMPLOYEE-RECORD
FILE STATUS IS file-status
这里用户在程序中使用的文件名是file-name,实际文件名是file3。file-name的定义放在程序后边的数据部的文件节中。文件是索引文件,程序可以随机访问文件。文件的主关键字是NUMBER OF EMPLOYEE-RECORD,替换关键字是LAST-NAME和SS-NUMBER,都是文件记录区的字段。LAST-NAME允许重复。
文件状态:(对文件操作时返回文件状态到定义的文件状态变量)
ANY00成功
ANY02对索引文件,成功但发现重复关键字
READ04成功,但纪录长度不符合指定长度
OPEN05成功,但文件是可选的,前面不存在
OPEN,CLOSE07对顺序文件,成功,但媒介不是盘
READ10文件已到末尾
READ14对相对文件,相对纪录号的有效位超过相对关键字数据项允许的位
WRITE,REWRITE21对索引文件,顺序出错
WRITE22对索引和相对文件,带这个关键字的纪录已经存在
START,READ23对索引和相对文件,带这个关键字的纪录不存在
WRITE24对相对文件,相对纪录号的有效位超过相对关键字数据项允许的位
ANY30I/O错误
WRITE34对顺序文件,发生超边界错误
OPEN35对顺序和相对文件,未发现非可选文件
OPEN37对顺序和相对文件,该文件不支持指定的打开方式
OPEN38对顺序和相对文件,文件已经用锁关闭
OPEN39对顺序和相对文件,文件属性不支持程序中指定的属性
OPEN41文件已经打开
CLOSE42文件未打开
DELETE,REWRITE43最近的操作不是READ
WRITE,REWRITE44纪录长度非法
READ46没有有效的下一个记录
READ,START47文件未在INPUT或I-O方式中打开
WRITE48文件未在OUTPUT或EXTEND方式中打开
DELETE,REWRITE49文件未在I-O方式中打开
ANY90~99厂家定义
由上可知,文件操作时会发生错误,COBOL提供了检查错误和恢复I/O错误的公用地点。过程部开头应包括DECLARATIVES部分,放上出现错误时要执行的语句。
PROCEDURE DIVISION.
DECLARATIVES.
section-name SECTION.
USE statement(出现错误时调用的节).
paragraph-name.
sentence...
END DECLARATIVES.
section-name SECTION.
paragraph-name.
sentence...
USE AFTER STANDARD EXCEPTION/ERROR PROCEDURE ON file-name/INPUT/OUTPUT/I-O/EXTEND
只能在USE语句中指定一个文件,一种方式也只能有一个USE语句。如果既指定了文件,也指定了方式,则文件优先。
程序使用的所有文件要定义在数据部的第一节----文件节中。