




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
cobol 知识点集锦 COBOL数据类型 计息是银行的一项重要业务,包括日常代理客户收、付计算客户利息和年度计息等。目前,这些工作大多数是在IBM ES9000主机的SAFE应用系统平台上进行,该系统联机程序和联机计息程序是用IBM 370汇编语言实现的。为方便汇编语言读写,在VSAM文件存储的数据中,数据存放格式进行了特殊的定义。如日期存放采用X(3)型,01年03月15日,存入EBCD码为X010315。在进行年度计息时,为了实现各种复杂的运算工作,一般采用COBOL语言来实现各种运算。而采用COBOL语言读取X(3)型数据时,读出的是字符型数据,不能直接进行运算,必须转换为COBOL数据类型的数据后才能进行相应处理。如刚才的X010315,需要转换为内部十进制数据X0010315C。本文介绍一种用COBOL语言实现字符型X(3)与内部十进制数据相互转换的方法。 由X(3)型转换为内部十进制 由于日期数据总是大于零,在COBOL语言的工作单元节定义变量DATEFIRST后,再追加定义COBOL语言的最小数据单元X000C,即十进制12。由于重定义DATECASE为DATECHANGE后,DATECHANGE是原日期数据的1000倍,于是要在过程部将DATECHANGE除以1000。 首先,在COBOL程序WORKINGSTORAGE SECTION. 中定义如下内容: WORKINGSTORAGE SECTION. 01 DATECASE. 02 DATEFIRST PIC X(3). 02 DATESIGN PIC 9(4) COMP VALUE 12.;定点二进制数 01 DATECHANGE REDEFINES DATECASE PIC 9(9) COMP3. ;内部十进制数据 01 DATEHEX PIC X(3). ; 转换前数据 01 DATEDEC PIC S9(7)COMP3 . ; 转换后数据 然后,在过程部PROCEDURE DEVISION.中加入如下语句: PROCEDURE DEVISION. MOVE DATEHEX TO DATEFIRST . COMPUTE DATECHANGE = DATE CHANGE / 1000. MOVE DATECHANGE TO DATEDEC. 由内部十进制转换为X(3)型 在进行相反的转换时,要消除因COBOL语言数据类型标志“C”引起的原日期数据前多加的一个0,所以需要将转换数据乘以10,再取出前6位数据即可。 首先,在COBOL程序WORKINGSTORAGE SECTION. 中定义如下内容: WORKINGSTORAGE SECTION. 01 WORKDATE PIC S9(7) COMP3. 01 AA REDEFINES WORKDATE. 02 A1 PIC X(3). 02 A2 PIC X(1). 01 DATEHEX PIC X(3). ;转换后数据 01 DATEDEC PIC S9(7) COMP3. ;转换前数据 然后,在过程部PROCEDURE DEVISION.中加入如下语句即可: PROCEDURE DIVISION. MOVE DATEDEC TO WORKDATE。 COMPUTE WORKDATE=WORKDATE10. MOVE A1 TO DATEHEX . COBOL语法 REDEFINES 可以用不同的变量描述同一内存。 01 PART_RECODE USAGE DISPLAY 03 PART-TYPE PICTURE. 03 PART_TYPE_A. 05 PART_NUMBER PICTURE. 05 PART_COST PICTURE. 03 PART_TYPE_B REDEFINES PART_TYPE_A. 05 UPC_CODE PICTURE. 03 PART_TYPE_C REDEFINES PART_TYPE_A. 05 ISBN PICTURE. 根据PART_TYPE决定用PART_TYPE_A还是PART_TYPE_B还是PART_TYPE_C。 规则: PART_TYPE_B和PART_TYPE_C长度不能大于PART_TYPE_A。 数据项不能有VALUE。 01层不能用REDEFINES. PART_TYPE_B和PART_TYPE_C中不能有OCCURS. PICTURE 定义基本项目的具体长度,格式,数据类型。可以简写成PIC. 格式字符串最多30个字符,可以包含下列字符: A 字母A-Z,a-z,空格 B 插入空格 P 标量字符,代表字段中不显示的小数点位置 S 代数符号,实际显示取决于项目的USAGE V 小数点位置 X 任何字符 Z 抑制前头的0并转换成空字符 0 插入0 9 数字09 / 插入/ , 插入,(逗号不能作为字符串的最后一位,最后时逗号是分隔符) . 插入. * 抑制前头的0并转换成* + 正值插入+,负值插入- - 正值插入空格,负值插入- $ 插入美元号 CR 正值插入两个空格,负值插入CR DB 正值插入两个空格,负值插入DB例子: 03 VAR PIC AAAAA. VAR变量长度为5个字符,不能有数字,等价于03 STATE PIC A(5)。 输入ASDFG ,显示ASDFG 03 VAR PIC XXXXX. VAR变量长度为5个任意字符。等价于03 FILLER PIC X(5)。 输入123AS , 显示123AS 03 VAR PIC 99/XXX/9999 长度11,输入05may2004,显示05/may/2004 03 VAR PIC 0ABXXX/9999 长度11,输入05may2004,显示05 may/2004 03 VAR PIC 9(3) 长度3,0999之间。 03 VAR PIC 9(4)V99 长度6,0.009999.99之间。 03 VAR PIC S9(5)V99 长度7,-99999.9999999.99之间。 03 VAR PIC 9(6)PPP 长度6,可以是1000,2000,.,999999000。输入1234,显示1000。 03 VAR PIC PPP999 长度3,0.0000010.000999之间。输入123,显示0.000123。 03 VAR PIC ZZZ.99,输入100.50,显示100.50;输入-51.50,显示51.50; 输入0,显示.00. 03 VAR PIC $ZZZ.ZZ-,输入100.50,显示$100.50;输入-51.50,显示$51.50-; 输入0,显示 03 VAR PIC $*,*.99CR,输入1000,显示$*1000.00;输入-1000,显示$*1000.00CR; 输入0,显示$*,*.00;输入51.5,显示$*,*51.50 03 VAR PIC $,$.99,输入100.50,显示$100.50;输入-100.50,显示$100.50; 输入0.777,显示$.77;输入0,显示$.00 03 VAR PIC $.$,输入1.00,显示$.00;输入0.65,显示$.65; 输入0,显示$.00; 03 VAR PIC $-,输入17.7,显示$17;输入-17.7,显示$-17; 输入-5,显示$-5 03 VAR PIC $999.99+,输入100.50,显示$100.50+;输入-100.50,显示$100.50-; 03 VAR PIC 9(3)B9(3),输入55,显示000 055;输入1000.78,显示001 000; 03 FILLER PIC X(44),补上44个空位。 USAGE 表示基本或组数据的类型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL. JUSTIFIED 03 VAR1 PIC X(5) JUSTIFIED RIGHT. 03 VAR2 PIC X(5). 输入XYZ,VAR1显示的是 XYZ,VAR2显示的是XYZ 。 BLANK WHEN ZERO 03 VAR PIC $999,999.99 BLANK WHEN ZERO. 当字段值为0,这个项目设置为全部空格。 VALUE 定义的时候就赋值。 03 VAR PIC X(5) VALUE ABCDE. 01 VAR VALUE ALL SPACES. 03 VAR1 PIC XXX. 03 VAR2 PIC XX. 算术语句 COBOL中操作符执行顺序为:取正(+)、取负(-)最高级,指数操作(*)其次,乘(*)、除(/)再其次,加(+)、减(-)最后。 ROUNDED 舍入操作。 77 A PIC 9V9 VALUE 9.1. 77 B PIC 9. ADD 0.5 TO A GIVING B ON SIZE ERROR GO TO PROC1. ADD 0.5 TO A GIVING B ROUNDED ON SIZE ERROR GO TO PROC2. END-ADD.ON SIZE ERROR 是当语句出现错误时执行的。本例中第一句话执行没有错误,所以ON SIZE ERROR不执行PROC1.第二句话,当0.5加上9.1得到9.6,因为有ROUNDED,所以执行舍入操作,得到10。而B只有1位数字,所以发生错误,执行ON SIZE ERROR操作,跳转执行PROC2。 CORRESPONDING(CORR) 数据项同名时编写多条语句。ADD和SUBSTRACT有此选项。 01 A. 03 B. 05 B1 PIC 999V99. 05 B1 PIC 999V99. 05 B1 PIC 999V99. 03 C. 05 B1 PIC 999V99. 05 B1 PIC 999V99. 05 B1 PIC 999V99.则语句ADD CORR B TO C.相当于执行了下面3条语句。 ADD B1 OF B TO B1 OF C. ADD B2 OF B TO B2 OF C. ADD B3 OF B TO B3 OF C.组项目不一定要格式相同。一个组项目中的内容在另一个组项目中可以没有,数据项顺序也无关紧要。只是严格按照数据项名称对应。 ADD A,B GIVING C. END-ADD. 将A,B相加放入C。 SUBTRACT A,B FROM C. END-SUBTRACT. 从C中减去A,B. MULTIPLY A BY B GIVING C. END-MULTIPLY. 将A,B相乘放入C。 DIVIDE A INTO B GIVING C. END-DIVIDE. 将B除于A的结果放入C. DIVIDE A BY B GIVING C. END-DIVIDE. 将A除于B的结果放入C. DIVIDE A BY B GIVING C REMAINDER D. 将A除于B的商放入C,余数放入D. D=A-B*C. 77 C PIC S99V9. 77 D PIC S99V9. DIVIDE 3 INTO 7 GIVING C REMAINDER D. C的值为2.3,D为0.1。(D=7-3*2.3) COMPUTE 除了取余操作要用DIVIDE外,其他操作都可以用此语句。本语句求值一个算术表达式,并将结果存放在一个或几个变量中。 COMPUTE A ROUNDED,B = X*Y/(N+M)+Z. 将X*Y/(N+M)+Z的结果存放在B中,然后舍入后放入A中。 MOVE MOVE A TO B. 也可以用CORR选项。 MOVE CORR A TO B. ACCEPT 从键盘或其他输入设备读取数据。 ACCEPT A FROM DEV. 从DEV读取数据到A,也可以省略FROM DEV,表示从键盘读取。 ACCEPT A FROM DATE/DAY/DAY-OF-WEEK/TIME.读取日期,表示为6个字符,如990909(1999年9月9日)。 读取当前日期在年度(前2位)中为第几天(后3位),表示为6个字符,如1994年4月1日表示为94091。 读取当前星期几,表示为1位字符。1表示星期一,7表示星期日。 读取当前时间,表示为8位字符。精确到毫秒。如下午2:41表示为14410000。 DISPLAY 将数据写入输出设备。如监视器(monite),系统输出流和操作员控制台(console)。 DISPLAY AAAAA BBBBB UPON DEV WITH NO ADVANCING 如果使用UPON选项,dev要与special-names段中的硬件名相关联。 如果使用no advancing选项,则输出最后一个字符后输出设备仍然保持原位,使下一条display语句还在该位置显示。否则可能到下一行显示。 INITIALIZE 初始化数据,数字和数字编辑数据项初始化为0,其他初始化为空格。 INSPECT TALLYING 计算项目中该字符串出现的次数。 INSPECT AA TALLYING BB FOR ALL “EE”. 从AA中查找有多少个EE,将个数写入BB。 INSPECT AA TALLYING BB FOR CHARACTERS BEFORE “E”. 从AA中查找E前面有多少个字符,将个数写入BB。 INSPECT AA TALLYING BB FOR CHARACTERS AFTER “C” BEFORE “E”. 从AA中查找C后面E前面有多少个字符,将个数写入BB。 INSPECT AA TALLYING BB FOR LEADING “E”. 从AA中第一个字符开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。 INSPECT AA TALLYING BB FOR LEADING “E” AFTER “C”. 从AA中C后面开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。组合例子: 77 CS PIC X(9) VALUE REELWHEEL. 77 COUNT-0. 77 COUNT-1. 77 COUNT-2. MOVE 0 TO COUNT-0,COUNT-1,COUNT-2. INSPECT CS TALLYING COUNT-0 FOR ALL E, COUNT-1 FOR LEADING W AFTER L, COUNT-2 FOR CHARACTERS. 程序首先判断的是字符R,执行COUNT-0 FOR ALL E,因为第一个字符不是E,所以程序转而执行COUNT-1 FOR LEADING W AFTER L,也不符合要求, 于是程序执行COUNT-2 FOR CHARACTERS,COUNT-2 =1。然后字符串往下一位,判断E,执行COUNT-0 FOR ALL E,符合要求,则COUNT-0=1。 有了满足条件的判断,则余下的判断不再执行,字符串再往下一位,判断E,则COUNT-0=2。接着判断L,则COUNT-2 =2。以此类推,最后结果为COUNT-0=4, COUNT-1=1,COUNT-2=4。 INSPECT REPLACING 用另一个字符串替换这个字符串。 还用上面的例子。 INSPECT CS REPLACING ALL E BY Y. 结果RYYLWHYYL INSPECT CS REPLACING CHARACTERS BY Z AFTER L. 结果REELZZZZZ INSPECT CS REPLACING LEADING E BY Y. 结果不变 INSPECT CS REPLACING LEADING E BY Z AFTER H. 结果REELWHZZL INSPECT CS REPLACING FIRST E BY I. 结果RIELWHEEL INSPECT CS REPLACING FIRST EE BY 00,ALL WH BY TH,CHARACTERS BY SPACE. 结果 00 TH INSPECT CONVERTING 就是INSPECT REPLACING的缩写。 INSPECT CS CONVERTING EE TO 00. 也可以加上BEFORE,AFTER。 STRING 将几个字符串合并成一个字符串。 STRING A DELIMITED BY SPACE, ! DELIMITED BY SIZE INTO C.假设A中的内容是HELLO,则结果是HELLO !. DELIMITED BY SPACE意思是碰到空格,或到A的结尾或C的结尾,则合并A字符串结束。 DELIMITED BY SIZE意思是到 !的结尾或C的结尾,则合并 !字符串结束。 STRING A INTO B POINTER C ON OVERFLOW PROC1 NOT ON OVERFLOW PROC2. 将A字符串复制到B中由C开始的地址处。如果C小于1或大于B的长度,或A的长度大于B中C到结尾处的长度,则发生 OVERFLOW溢出,执行PROC1。 UNSTRING 将一个字符串中的字符按照要求放入多个变量中。 UNSTRING AAA DELIMITED BY ALL B OR ALL C . INTO C DELIMITER IN D COUNT IN E .WITH POINTER F TALLYING IN G ON OVERFLOW PROC1 NOT ON OVERFLOW PROC2 END-UNSTRING 将AAA中的字符放入C,如果还有其他变量,如C2,则等C放满后放入C2。 DELIMITED BY和STRING中的作用一样。表示将AAA中到B为止的字符取出。如果有OR,则表示到B或C字符为止的字符取出。如果有ALL,则如果几个相同的B在一起,则认为是一个B。 DELIMITER IN 将B放入D,知道是哪个字符为分隔符。 COUNT IN 实际复制到C中的字符数放入E中。 WITH POINTER 和STRIGN中一样。 TALLYING IN 计算有几个接受项。访问一个新的接受项,G值加1。例子: 03 CITY PIC X(10). O3 ZIP PIC X(10). 77 TEST PIC X(20). MOVE NEW YORK,NY 10017 TO TEST. UNSTRING TEST DELIMITED BY , INTO CITY,ZIP. 执行结果CITY值是NEW YORK.ZIP的值是NY 10017。 逻辑和控制语句 IF (A NOT B) 等价于 IF (A NOT GREATER THAN B) IF (A NOT = B) 等价于 IF (A GREATER THAN OR EQUAL TO B) IF (A B AND C) 表示A NOT 大于B 而且 A NOT 大于C IF A IS NOT NUMERIC 数字和可选符号 IF A IS NOT ALPHABETIC AZ,az字符和空格 IF A IS NOT ALPHABETIC-LOWER az字符和空格 IF A IS NOT ALPHABETIC-UPPER AZ字符和空格 IF A IS NOT CLASS-NAME SPECIAL-NAMES定义的字符集 例如:SPECIAL-NAMES. CLASS MYDEFINE IS 12345+ABCDE-. 判断变量是否定义了数值。这个变量是88层的,且要与一个数据项关联。 03 STATE PIC XX. 88 CON VALUES ARE A,B,C. IF CON . 判断厂家定义运行开关的开/关状态。 SPECIAL-NAMES. SWITCH-A ON STATUS IS A-ON ,OFF STATUS IS A-OFF. IF A-ON. 若开关在开位置,则IF A-ON返回TRUE。 IF A IS NOT POSITIVE 判断是否大于0 IF A IS NOT NEGATIVE 判断是否小于0 IF A IS NOT ZERO 判断是否等于0 COBOL支持NOT ,AND ,OR 操作。 PERFORM 过程调用,但是不传递参数。 PERFORM PROC1 THROUGH PROC2 执行完PROC1再执行PROC2.没有THROUGH(THRU)就只执行PROC1. PERFORM PROC1 THRU PROC2 N TIMES 执行PROC1或者还有PROC2N次。 PERFORM PROC1 THRU PROC2 WITH TEST BEFORE/AFTER UNTIL A NOT EUQAL 0. 执行PROC1或者还有PROC2直到A不等于0。WITH TEST BEFORE/AFTER指定在第一次执行之前还是之后判断条件。默认是BEFORE,执行之前判断。 PERFORM PROC1 THRU PROC2 WITH TEST BEFORE/AFTER VARYING A FROM B BY C UNTIL CONDITION1 AFTER D FROM E BY F UNTIL CONDITION2. 相当于FOR循环,将A的值从B开始,以C为单位递增,直到满足CONDITION1。AFTER语句是一个嵌套的FOR 循环。VARYING是外循环,AFTER是内循环。A,B可以是索引。 过程也可以直接写入PERFORM中。但是THROUGH就不好用了。语法如下 : PERFORM 过程语句 END-PERFORM. PERFORM N TIMES 过程语句 END-PERFORM. PERFORM WITH TEST BEFORE/AFTER UNTIL CONDITION 过程语句 END-PERFORM. PERFORM WITH TEST BEFORE/AFTER VARYING A FROM B BY C UNTIL CONDITION1 过程语句 END-PERFORM. IF语句 IF CONDITION THEN STATEMENTS1/NEXT SENTENCE ELSE STATEMENTS2 END-IF/NEXT SENTENCE/ENDIF NEXT SENTENCE将跳出IF操作语句执行下一条语句。 IF语句中不要使用.句号。.句号将结束所有IF语句。要结束一个嵌套的IF语句,可以使用END-IF或者NEXT SENTENCE.如 IF A IF B END-IF ELSE C END-IF.或者 IF A IF B ELSE NEXT SENTENCE ELSE C END-IF. EVALUATE 相当于SWITCH CASE语句。 EVALUATE A WHEN B . WHEN 0 THRU 100 .(FROM 0 TO 100) WHEN OTHER . END-EVALUATE 首先得到A的结果,和WHEN语句的参数比较,如果和B相等,就执行B后的操作,执行完了不再执行后面的WHEN语句。如果不等就执行下一条WHEN语句。如果没有相等的就执行WHEN OTHER语句。 EVALUATE A ALSO B WHEN C ALSO D . WHEN E ALSO F . WHEN OTHER . 对于有多个判断条件的,要多个条件同时满足。如上要C=A同时D=B,才执行WHEN语句。 CONTINUE 继续执行下面的程序。 GO TO GO TO PROC1 DEPENDING ON N DEPENDING ON N将跳转到清单中的第N个PROC. EXIT 一般为最后一句话。 STOP STOP RUN 结束程序。 ALTER ALTER PROC1 TO PROC2. 不懂什么意思,反正已经从标准中废除了这个语句。 ENTER 使其他编程语言中的语句可以放进当前源程序中。 ENTER LANGUAGE-NAME ROUTINE-NAME LANGUAGE 是厂家指定可以输入COBOL的任何语言,这个语句后面是其他编程语言的语句,然后要用ENTERCOBOL表示返回COBOL语言。 如果无法将其他语言的程序直接放入,可以用ROUTINE-NAME引用其他语言编写的程序。 cobol程序格式 cobol源程序的格式如下: 每行开头有6个字符的序号区。可以输入000010,000020等表示行,也可以不输。 序号区后面是一个字符(第7位)的指示符区,如第一行所示。可以用*和/表示注释,_表示续行,D表示调试。 指示符区后面是4个字符(811位)的A区。可以放入部,节,段标题,段名,层指示符和层号01与77, 关键字DECLARATIVES和END DECLARATIVES,程序结束标题。 A区后面(12位以后)是语句体,称为B区。过程部的语句必须从B区开始。B区宽度通常为72或80个字符。 本例是70个字符。 空行的每个区都是空格标识部(24行),PROGRAM-ID段包含程序名,是每个程序都必须的。AUTHOR等其他段是可有可无的。 环境部(515行),提供与程序外部有关的项目,具体地说,就是列出程序所用的文件。如果不需要可以省略。 环境部有配置节(610行)和输入输出节(1115行)。 第7行表示编译程序的计算机。如果指定WITH DEBUGGING MODE就编译调试行。 第8行表示程序运行的计算机。 第9,10行包含一组指定输出样式。这里是标准输出,可以自定义。 输入输出节只用于文件。 第13到15行表示如果程序使用文件,则这个段对每个文件包含一个项目。 文件控制项目的格式取决于文件的描述类型。 数据部(1622行),提供程序变量的存放位置,对不同的数据类型分成不同的节:文件数据(File Section)、静态数据(Working-Storage Section)、参数(Linkage Section)、通信(Communication Section)、报表(Report Section)。 文件节(1821行),每个文件描述中包含文件所含纪录的定义,文件节中的数据或从文件读取, 或由写文件的程序产生。 第22行表示工作存储节,这节包含程序所需的临时结果和初始化静态数据的数据。 参数(Linkage Section)包含调用程序传递的数据(其他语言中称为参数)。 通信(Communication Section),处理COBOL程序和通信设备之间的消息。 报表(Report Section),报表节实现COBOL报告编写工具系统所需的数据。 第20,21行的PIC是PICTURE的缩写,表示定义数据格式。 X(12)表示12个字符的字符串,9(09)表示9位的整数。 可以将基本项目组成层次结构,称为组数据项或组。COBOL程序中的数据项的定义从层号开始,01层是最高层,49层是最低层。 77层项目用于某个组的数据项,如程序中的临时变量。 66层是为特殊描述符项目保留的,可以更名现有的数据项或组,或以原定义未允许的方式组合。 88层是对特殊数据项目条件名保留的 如: 03 STATE PIC XX. 88 NEW-ENGLAND VALUES ARE 1,2,3,4,5. IF NEW-ENGLAND . then do something 过程部(2330行),包含构成程序的过程性语句。 带DECLARATIVES的过程部。有些程序用特殊的USE语句表示遇到特殊条件时要执行的过程, 如发生I/O错误时。 USE语句组合在一起,放在过程部开头,由关键字DECLARATIVES和END DECLARATIVES限定。 第24行相当于定义了一个名字叫ACAB030100-PROC()的函数。 第25,29行定义了标志,可以用GO TO 语句跳转到这个地方,执行下面的语句。 第26行在屏幕上打印,相当于printf(ACAB030100-START); 第27行是调用ACAB030100-PROC()函数。 cobol程序的要求:必须以英文句号.结束部标题、节标题、段名、项目和语句。 句号为小数点时,两边都要有数字。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允许重复。 文件状态:(对文件操作时返回文件状态到定义的文件状态变量) 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 9099 厂家定义 由上可知,文件操作时会发生错误,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/EX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业设计在智能产品开发中的作用和价值研究
- 工业领域的智能化数据分析
- 工业设计原理与产品设计创新
- 工业设计的创新方法与技术应用
- 工业风格商业空间设计
- 工业风办公室装修风格解读
- 工作场合有效表达的技巧
- 工厂用电安全操作规范
- 工程力学中动载材料特性研究
- 工程测量中的新方法与新技术探讨
- (完整版)增值税申报表带公式模板
- 期末考试卷2《心理健康与职业生涯》(原题卷)高一思想政治课(高教版2023基础模块)
- 英文经典电影赏析智慧树知到期末考试答案2024年
- 从安全意识到安全行为习惯的养成
- 七下第三单元《骆驼祥子》整本书阅读 公开课一等奖创新教学设计
- 坍塌事故培训课件
- 国有集团公司中层及员工履职追责问责处理办法模版
- 火灾隐患整改情况报告表4
- 高三数学复习备考策略
- 《环境工程概论4》全册配套完整教学课件
- 工贸企业员工安全培训试卷
评论
0/150
提交评论