要在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允许重复。
文件状态:(对文件操作时返回文件状态到定义的文件状态变量)
ANY
00 成功
ANY
02 对索引文件,成功但发现重复关键字
READ
04 成功,但纪录长度不符合指定长度
OPEN
05 成功,但文件是可选的,前面不存在
OPEN,CLOSE
07 对顺序文件,成功,但媒介不是盘
READ
10 文件已到末尾
READ
14 对相对文件,相对纪录号的有效位超过相对关键字数据项允许的位
WRITE,REWRITE 21 对索引文件,顺序出错
WRITE
22 对索引和相对文件,带这个关键字的纪录已经存在
START,READ
23 对索引和相对文件,带这个关键字的纪录不存在
WRITE
24 对相对文件,相对纪录号的有效位超过相对关键字数据项允许的位
ANY
30 I/O错误
WRITE
34 对顺序文件,发生超边界错误
OPEN
35 对顺序和相对文件,未发现非可选文件
OPEN
37 对顺序和相对文件,该文件不支持指定的打开方式
OPEN
38 对顺序和相对文件,文件已经用锁关闭
OPEN
39 对顺序和相对文件,文件属性不支持程序中指定的属性
OPEN
41 文件已经打开
CLOSE
42 文件未打开
DELETE,REWRITE 43 最近的操作不是READ
WRITE,REWRITE 44 纪录长度非法
READ