COBOL文件操作(转载)

精通COBOL--16.7.1 读取文件   CICS所支持的VSAM文件主要有KSDS、ESDS、RRDS。此外,文件在CICS中由FCT(File Control Table)所统一管理。因此,在相应的COBOL程序中不用手工定义和打开文件。假设某一文件的文件名为“TESTF”,则在程序中通过CICS读取该文件的代码通常如下:IDENTIFICATION  DIVISION.PROGRAM-ID.  FREADPG.    阅读详情

要在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″
or GANIZATION 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″
or GANIZATION 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           46 没有有效的下一个记录
READ,START     47 文件未在INPUT或I–O方式中打开
WRITE          48 文件未在OUTPUT或EXTEND方式中打开
Delete,REWRITE 49 文件未在I–O方式中打开
ANY            90~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语句。如果既指定了文件,也指定了方式,则文件优先。

程序使用的所有文件要定义在数据部的第一节––––文件节中。
FD file–name
[BLOCK CONTAINS int–1 [TO int–2] RECORDS/CHARACTERS]
[RECORD (CONTAINS int–3 [TO int–4] CHARACTERS)/(IS VARYING IN SIZE [FROM int–5] [TO int–6] CHARACTERS)/(DEPENDING ON data1)
[LABEL (RECORD IS)/(RECORDS ARE) STANDARD/OMITTED]
[VALUE OF (implementor–name IS id–lit–1)...]
[DATA (RECORD IS)/(RECORDS ARE) data2]
BLOCK CONTAINS 指定实际纪录的具体长度或最大与最小长度的逻辑记录数或块数。一般有操作系统和文件系统指定。
RECORD 指定包含变长纪录的文件中记录的最大与最小长度或定长纪录的具体长度。
RECORD CONTAINS 如果不带TO,则int–3是每个纪录的长度;如果带TO,介于int–3和int–4之间。
RECORD IS VARYING 指定纪录长度最小int–5和最大int–6。
DEPENDING ON 如要用,则需要在data1中保存纪录长度。
LABEL RECORD 指定文件是否带标号。(过时,下个版本不包含)
VALUE 和LABEL一起检查标号的不同部分。(过时,下个版本不包含)
DATA RECORD 指定属于文件的纪录描述项(FD后的01层项目)并作为程序文档。(过时,下个版本不包含)
一般定义文件只用第一句:FD file–name
顺序文件的LINAGE声明
对顺序文件,LINAGE声明可以在文件输出是打印机或打印机兼容文件时指定一些打印细节。
[LINAGE IS BODY LINES [WITH FOOTING AT FOOT][LINES AT TOP TOP][LINES AT BOTTOM BOTTOM]] [CODE–SET IS alphabet–name]
整个文件分成TOP,BODY,BOTTOM三部分。其中BODY包含有FOOT.
CODE–SET指定文件中所用的字符集。

过程部主要是对文件的OPEN,CLOSE,READ,WRITE,START,REWRITE,Delete等操作。
OPEN
OPEN文件有4种方式:(如果文件声明为OPTIONAL,则文件不存在会创建文件,否则会报错)
OPEN INPUT FILE–NAME.    只能读取的文件。
OPEN OUTPUT FILE–NAME.   生成写入纪录的文件,读取该文件会出错。若文件已存在,已有记录会被全部删除。
OPEN I–O FILE–NAME.      可读可写的文件。
OPEN EXTEND FILE–NAME.   生成写入的文件。与UOTPUT的区别在于,若文件已存在,EXTEND将纪录加在文件末尾。
如果OPEN不成功,执行USE语句。USE语句不存在,则程序结束。
顺序文件的OPEN可以有以下方式:
OPEN INPUT FILE–NAME [(WITH NO REWIND)/REVERSED].
OPEN OUTPUT FILE–NAME [WITH NO REWIND].
REVERSED可以逆序处理,即由后向前处理。(过时,下个版本不包含)
WITH NO REWIND 用于单卷磁带文件,如果指定文件在不适用REWIND的媒介上,忽略。
在文件描述项中指定LINAGE得顺序文件不能用EXTEND方式打开。

CLOSE
所有文件的CLOSE方法:
CLOSE FILE–NAME.    关闭文件。
CLOSE FILE–NAME WITH LOCK.    关闭文件,不退出程序不能再打开此文件。
顺序文件还有其他一些选项,如关闭卷或单元,和继续处理文件:
CLOSE file–name [REEL/UNIT] [FOR REMOVAL]/WITH NO REWIND

READ
顺序访问方式读文件。一定要有NEXT字样。
READ file–name [NEXT] RECORD [INTO data1]
[AT END statements][NOT AT END statements] [END–READ]
如果READ成功且有INTO,将读到的数据写入data1。
如果文件中没有记录,执行AT ENDstatements,如果没有就执行USE。
如果READ成功,就执行NOT AT END statements。

动态访问方式读文件。(相对或索引文件)
利用OPEN语句,将文件指针设在开头。
进行各种成功的READ操作。
有START语句标识文件中的纪录。

随机访问方式读文件。
READ file–name RECORD [INTO data1]
[INVALID KEY statements][NOT INVALID KEY statements] [END–READ]
如果READ成功且有INTO,将读到的数据写入data1。
如果文件中没有记录,执行INVALID KEY statements,如果没有就执行USE。
如果READ成功,就执行NOT INVALID KEY statements。
如果是相对文件,要设置文件控制项RELATIVE KEY中指定的整型关键字值后才能执行READ.
如果是索引文件,要设置当前索引的关键字值后才能执行READ.

WRITE
顺序方式。
WRITE data [FROM data1] [BEFORE/AFTER ADVANCING mnemonic–name/PAGE/N LINE(LINES)]
[AT END–OF–PAGE(EOP) statements][NOT AT END–OF–PAGE(EOP) statements][END–WRITE]
如果指定了FROM,先将data1复制到data,再写入文件。
BEFORE/AFTER ADVANCING N LINE(LINES) 在纪录间插入N个空行。
AT END–OF–PAGE(EOP) 对于带LINAGE的文件有效,在WRITE使指针进入页脚(FOOT)时,先执行WRITE,再执行AT END–OF–PAGE(EOP) statements。

相对和索引文件方式。
WRITE data [FROM data1]
[INVALID KEY statements][NOT INVALID KEY statements] [END–WRITE]

REWRITE
替换文件中的一个记录。
顺序方式:REWRITE data [FROM data1] [END–REWRITE]
相对和索引方式:
REWRITE data [FROM data1]
[INVALID KEY statements][NOT INVALID KEY statements] [END–REWRITE]

Delete
删除文件中的一个记录。只能用于相对或索引组织的文件。
Delete file–name RECORD
[INVALID KEY statements][NOT INVALID KEY statements] [END–Delete]
顺序访问方式的话,前一个READ的纪录被删除。
随机或动态访问的话,RELATIVE KEY的内容或主关键字所表示的纪录从文件中删除。

START
将相对或索引文件定位到某个纪录,以便对其进行顺序访问。只对相对和索引文件有效。
START file–name [KEY IS (EQUAL TO)/=/GREATER THAN/>/NOT LESS THAN/NOT < data]
[INVALID KEY statements][NOT INVALID KEY statements] [END–START]
如果执行成功,则data所属的索引变成文件的当前索引。
对于相对文件,data定义为文件的RELATIVE KEY的数据项。
对于索引文件,data为下列之一:
文件的主关键字,是RECORD KEY从句中指定的数据项。
文件的替换关键字,是AlterNATE RECORD KEY从句指定的数据项。
从一个关键字的第一个位置开头,长度小于或等于该关键字的数据项。

 

引用地址:http://www.emool.cn/archives/y2008/60.html

cobol语言简介 机缘巧合之下做一个老项目翻新的项目,从cobol到java,我也学习了cobol的一些知识,记载一下我的cobol语言的学习。 cobol语言简介 cobol:common business oriented language(公用面向商业语言),这个语言目前使用面没有之前的广,也就需要了解对应cobol语言即可。不需要配置对应环境学习。 语言格式 如上图所示,在cobol程序中,1-6 列表示代码的序号区,代表当前序列,类似与行号。7列表示指示符区,如果是*,则表示此行为注释行。 程序结构 co.. 阅读详情

相关推荐

cobol 文件相关语句

OPEN OPEN语句主要实现对文件的打开操作,OPEN还可以指定打开文件是输入还是输出操作。 OPEN还可以一次打开多个文件,文件之间用空格打开。 文件名必须是环境部输入、输出节中由SELECT语句所指定的文件名一致。 OPEN语句可以出现在程序中的任意位置,通常在处理的第一步 如果读文件之前没有打开,程序就会异常(ABEND) CLOSE 和OPEN一样,CLOSE用于关闭已打开的文件,不过通常用于程序的结尾。 READ READ语句从文件中读取数据,将文件中的数据读到FD语句中所定义的变量中

大道至简 1731

COBOL文件操作

要在COBOL中使用文件,要在3个不同的部中放上信息。环境部,要有程序使用的每个文件的文件控制项目(FILE–CONTROL)。这个项目将程序中使用的文件名与程序外的实际文件联系起来。这些项目还定义文件的组织和访问方式。数据部,要有每个文件的文件描述符(FD)项目,就是数据定义。过程部,放上处理语句,OPEN,READ,WRITE,Delete等。环境部中主要是FILE–CONTROL和I–O–C

茄子的专栏 6188

COBOL

cobol

qq_46029070的博客 4545

60 岁的 COBOL 凭什么活到现在?

COBOL将比我们所有人都活得更久,知道为什么吗? 作者 |Steven J. Vaughan-Nichols 译者 |风车云马,责编 | 刘静 出品 | CSDN(ID:CSDNnews) 以下为译文: 计算机最初有机器语言和汇编程序,两者在使用上都不容易。自从后来出现了COBOL,一切都变了。 早期计算机语言的由来 我开始是在IBM 360汇编机上编程...

CSDN资讯 7676

COBOL中调用REXX脚本[转载]

例子转自IBM z/OS V1R9.0 information center(http://publib.boulder.ibm.com/infocenter/zos/v1r9/index.jsp?topic=/com.ibm.zos.r9.rexa100/h1981605303.htm)      //* -->uidIEC JOB - Specify your Job card h

Simon's Tech Book 1762

为什么没人会 COBOL 编程了?

忘了Python,来学习COBOL,人人都可以成为救世英雄。作者 |Rhea Moutafis译者 |弯月,责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN(ID:...

CSDN资讯 7047

COBOL简史

和现在流行的java,c#等比起来,COBOL可以算化石级的语言了。问世40多年来,COBOL主要在IBM大型机等平台上支撑商业应用。估计大多数人也只是在大学里学习c语言时,才会在教材上提到有一种适合商业应用的语言COBOL。C...

congzhan1377的博客 780

COBOL入门

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34082854的博客 786

COBOL基础知识

本文内容源于对IBM英文文档的理解与归纳,不保证其准确性。仅用于自学,转载请注明出处。-----------------------------------------------------------------------------------------------1.编码格式第1~6列为序号区,用于表示行号。行号不是必须的,也不必是顺序的,甚至可以是本机字符集中的任意字

共享,学习,纪录 1万+

COBOL程序的基本结构

COBOL是一种结构非常严谨的语言,很多地方设置还保留了卡片机编程时代的痕迹。COBOL程序按照部(division),节(section),段(paragraph)分成不同的部分和层次。早期的COBOL都是大写的,COBOL-...

congzhan1377的博客 1929

旧的 COBOL 代码转为 Java,IBM 计划发布一款 GenAI 工具

【CSDN 编者按】COBOL 是一门古老的语言,它的诞生最早可以追溯到1959年,过去经常被企业、组织用来处理庞大的商业数据。然而经过时间的迭代,很多 COBOL 程序员退休,导致遗留的代码无人维护。IBM 为解决这一难题,推出针对 IBM Z 系列大型机的 wastsonx Code Assistant,它将可以帮助开发人员更快把旧的 COBOL 代码转换为新的 Java,以此来帮助大型机...

CSDN资讯 2374

cobol hello world

实验目的 1. 编写COBOL程序,体验COBOL编写过程 实验要求 2. 编写简单程序,运行程序 3. 对给出程序进行改错,使之正常运行。 实验过程 1. 接受从键盘输入的一条记录,将它复制入临时变量中。 输出结果: 其中加载程序的jcl为 分析 Cobol将顺序的数据序列按照用户定义的规则进行解析,故而对数据进行操作时,要特别注意数据内容的格式定义,字...

amy880521的博客 392

COBOL语言数据类型转换方法

计息是银行的一项重要业务,包括日常代理客户收、付计算客户利息和年度计息等。目前,这些工作大多数是在IBM ES9000主机的SAFE应用系统平台上进行,该系统联机程序和联机计息程序是用IBM 370汇编语言实现的。为方便汇编语言读写,在VSAM文件存储的数据中,数据存放格式进行了特殊的定义。如日期存放采用X(3)型,01年03月15日,存入EBCD码为X‘010315’。在进行年度计息时...

dast78187的博客 1947

关于cobol batch处理中的restart

关于cobol batch处理中的restart 批量文件处理中,如果因为某条数据错误导致了job abend,重新启动job再处理,几十分钟甚至几个小时的作业丢失对于分秒必争的batch cycle就是个噩梦! 尤其是对DB2和file同时处理的关键程序...

ailiaoqiao0879的博客 302

COBOL知识总结:

COBOL知识总结: 一:cobol简介 1.模拟大型机系统--Hercules 2.终端连接软件--PCOM:右Ctrl键为确定,F7对屏幕进行上翻,F8对屏幕下翻,F3退回上一个菜单 3.COBOL:程序设计语言 4.JCL:作业控制语言,调用COBOL程序 5.VSAM:程序中通常用到的文件类型 6.DB2:大型机上的数据库,以COBOL为宿主语言 7.CICS:联机交易的中...

weixin_30323961的博客 1182

COBOL程序中取得百万分之一秒精度时间(没有使用DB2的情况下)--转载

COBOL程序中取得百万分之一秒精度时间(没有使用DB2的情况下)COBOL程序中通常要用的要精度计时,但是COBOL提供的时间精度最大也就百分之一秒 通过CALL下列程序就可以取得当前时间的TimeStamp(百万分之一秒)  ********************************************************************** KDS

alieno1的专栏 1283

COBOL语言简介

英文缩写: COBOL (Common business Oriented Language) 中文译名: COBOL语言 解释: 一种适合于商业及数据处理的类似英语的程序设计语言。这种语言可使商业数据处理过程精确表达。 COBOL(面向商业的通用语言,又称为企业管理语言、数据处理语言等,Common Business Oriented Langauge)是最早的高级编程...

weixin_30745553的博客 507
上一篇: COBOL文件操作
下一篇: COBOL文件操作(转载)
lock0812
博客等级 码龄20年 9粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值