CHAPTER 4 数据部之一
一。数据部概述。
1。 数据部的作用是定义数据项属性,描述数据结构。所有在过程部中出现的数据项都必须在数据部中对它们的属性进行说明。包括数据项的类型,数据项间的关系,记录与文件的关系,文件的属性。
2。 数据的层次和层号:COBOL中把有从属关系的数据用层次(level)关系来描述。数据的层次结构是:记录--》组合项--》初等项。如,在前面READ语句中定义的 IN-FILE 文件具有如下结构:
01 IN-RECORD。
02 PROD-CODE PIC 9(4)。
02 PROD-QUANTITY PIC 9(5)。
02 PROD-PRICE PIC 9(6)。
02 MANU-DATE。
05 DATE-CCYY PIC 9(4)。
05 DATE-MM PIC 9(2)。
05 DATE-DD PIC 9(2)。
层次规定如下:
(1)用来描述数据的层次结构的层号从01到49。记录的层次最高,定为01层号。
(2)从属项的层号比其下属项的层号高。层号不必要求连续。
(3)从属于同一组合项但不互相从属的数据项具有相同的层号。
3。数据部的结构: 数据部中通常用到的有以下几个节:
(1)FILE SECTION:描述程序中用到的输入输出文件及其记录中各数据项的属性。
(2)WORKING-STORAGE SECTION:描述程序中用到的中间数据项。
(3)LINKAGE SECTION:描述与调用程序间发生数据传递的数据项。
(4)REPORT SECTION:为了完成报表编制功能,此节用来规定欲输出的报表的
‘体裁’,设计各报表栏的打印形式和方法等。
二。文件节。
1。文件节的作用: 程序中每一个输入或输出文件都要在文件节中加以描述。内容包括:文件名和文件属性;文件中包括的记录名字;每个记录中数据的层次关系;记录中各数据项的数据形式和占内存的大小。
2。文件描述: 最简单的文件描述体的一般格式为:
FD 文件名
LABLE RECORD IS STANDARD
RECORDS ARE OMITTED
DATA RECORD IS 数据名
RECORDS ARE
3。记录描述:记录描述体由01层号开始,后跟记录名。如果记录本身就是一个初等项,则在记录名后描述记录长度;否则,数据名后跟句点,下面定义记录的数据结构。如:
DATA DIVISION。
FILE SECTION。
FD IN-FILE
LABLE RECORD IS STANDARD。
DATA RECORD IS IN-FILE-RECORD。
01 IN-FILE-RECORD PIC X(80)。
DATA DIVISION。
FILE SECTION。
FD IN-FILE
LABLE RECORD IS STANDARD。
DATA RECORD IS IN-FILE-RECORD。
01 IN-FILE-RECORD PIC X(80)。
或 ( 01 IN-FILE-RECORD。
05 DATE PIC 9(8)。
05 PROD-CODE PIC 9(4)。
05 PROD-PRICE PIC 9(6)。 )
4。数据项描述: 在每一个初等项的名字后跟一个PIC子句。用它来描述数据的类型和长度。PIC子句在下面详细说明。
5。文件节的书写格式: FD从A区开始书写,01层号也从A区开始,其它层号可以从A区也可以从B区开始。为了看起来层次分明,最好从B区开始。
三。PIC 子句。PIC即PICTURE的缩写。PIC子句用来描述每一个初等项。它说明:(1)数据项是什么类型。(2)数据项占多大内存域。(3)是否需要按打印的要求准备有关字符。PIC子句的主要作用在于描述一个初等项的一般特征和编辑要求。
1。数值型数据的描述:
‘9’描述符: 表示该位置上可以放入一个0 ~ 9 之间的数字。因此:
01 A PIC 999。 或
01 A PIC 9(3)。
表示A可以存放000 ~ 999 之间的一个三位数。有几个9表示有几位数。
注意:(1)在数值型数据项中只能放数字不能放空格。
(2)用‘9’描述符只能表示整数,如输入小数部分,则小数部分被舍弃。
(3)如送入一个负数,则负号被舍弃。
‘V’描述符: 指出在数值数据结构中隐含的小数点的位置。小数点不占内存单元。如:
03 M PIC 9(3)V9(2)。
注意:(1)V在描述符的最后,则等于无小数点。
(2)一个数据的描述符中只能出现一个V。
(3)进行数据传送或运算时,按隐含的小数点位置对准进行传送或运算。
(4)V表示的小数点只在传送或运算时起作用,不能被显示或打印出来。
‘S’描述符: 如果想在数据项中放入一个带符号的数,可以用‘S’描述符。如:
03 M PIC S9(3)V9(2)。
注意:(1)S描述符必须是最左边的一个描述符。
(2)在内存中,S不占位数,在传送或运算时起作用。
2。字母型数据的描述:字母型数据项用A描述符,在这种类型的数据项中只允许存放字母或空格。
3。字符型数据的描述:由任意的COBOL字符组成的数据,称为字符型数据,它是非数值型的,不能用于计算。用X描述符来表示字符型数据。如:
03 M PIC X(5)。
注意:(1)字符型数据可以用X描述符,也可以用9和A描述符来描述。如描述数据
‘COB-74’可以用PIC X(6),也可以用 PIC A(3)X9(2)。
(2)字母型数据既可以用A描述,也可以用X。
(3)字符型数据中可以放数字。
4。编辑型描述符:编辑型数据项只是作为输出数据时增加或改变某些所需的符号,起编辑作用,它不是作计算用的。下面分别介绍编辑数据项中用到的编辑描述符。
(1)。插入小数点‘。’,用‘。’描述符。如:
77 T PIC 99。99。
(2)。插入逗号‘,’作分位号,用‘,’描述符。如:
02 A PIC 999,999。99。 (或PIC 9(3),9(3)。9(2))
(3)。插入空格,用‘B’描述符。如:
02 A PIC B9(3)B。
(4)。插入正负号,用‘+’或‘-’描述符。如:
02 A1 PIC +9(3)。(或 PIC 9(3)+)
02 A2 PIC -9(3)。(或PIC 9(3)-)
注意:描述符‘+’,一侓加符号。描述符‘-’只对负值加负号。
(5)。插入‘$’ 。如:
02 A1 PIC $999。99。
02 A2 PIC +$99999。
02 A3 PIC -$999。9。
(6)。浮动插入正负号和‘$’
02 A1 PIC $$$99.99.
02 A2 PIC $$$$$.$$.
02 A3 PIC ++9.99.
(7)。取消高位零,用‘Z’和‘*’描述符。在高位零的位置上代以空格或‘*’。如:
02 A1 PIC Z(5)。99。
02 A2 PIC *(5)。*(2)。
02 A3 PIC +ZZZ,ZZZ,ZZ。ZZ。
02 A4 PIC -*,***,***。99。
(8)。插入‘DB’和‘CR’字符。DB和CR只能用作固定插入,当数值为负时,在编辑型数 据项中最后两个字节中置DB或CR,数值为正时,此两字节留空格。如:
02 A1 PIC $9(3)。99DB
02 A2 PIC $9(3)。99CR。
5.常用数值型数据
四。工作单元节(WORKING-STORAGE SECTION)
1。工作单元节的作用:程序中用的数据项分为两部分,一部分是属于输入或输出文件的,另一部分是非输入或输出的数据。如一些中间变量或用作累计的数据项等。非输入输出的数据就应在工作单元节中描述,还可以用工作单元节来赋初值。
2。VALUE子句:用于给变量赋初值。如:
02 A PIC 9(3) VALUE 123。
注意: (1)只有对工作单元节中的数据项才能赋初值,不能对文件节中输入输出文件中的 数据项赋初值。
(2)如果在组合项的描述体中使用VALUE,初值只能是表意常量或非数值型常量。 对组合项整体而言,一律按字符型数据项处理。
(3)当用一个带符号的数值作初值时,相应的PIC子句中应有‘S’描述符。
(4)赋初值时应该注意类型的一致性。
(5)VALUE子句给出的值应适合PIC子句的描述范围,否则会出现截断或产生错误。