表
1.表概念。
table 相当于其他算法语言中的数组。表元素 , 赋值 引用 表处理。
2.表的建立:
如果一个数据名不是代表单一的数据项,而是一个表的名字,则应在数据部中做说明。指出表包含多少个表元素。如:
01 STUDENT-RECORD
02 NAME PIC X(20).
02 COURSE OCCURS 5 TIMES PIC 9(3).
格式:
最简单格式:
OCCURS 整数 TIMES
注意:
OCCURS后面只能为正整数。
OCCURS不能出现在77层,不能用于01层。
“表”只能定义在记录内部。如果想在一张卡片中包含几个产品的数据,可以在01层下面增加一层,把表定义在这一层上。如:
01 CARD-REC.
02 PRODUCT OCCURS 4 TIMES.
03 PRODUCT-NUM PIC 9(4).
03 PRODUCT-NAME PIC X(16).
在COBOL中表元素可以允许为组合项,而且在建立一个多维表的同时,也建立了一维(或二维)表。
ANSI COBOL 1974允许最多用到三维表。
只有当OCCURS所说明的数据是初等项时,才能在该数据项的描述中使用PIC字句。
3.可变长表
有时一个“表”中需要包含多少个表元素并不是固定的。
一般格式:
OCCURS 整数1 TO 整数2 TIMES
DEPENDING ON 数据名1
01 STUDENT-SCORE-RECORD.
03 NAME PIC X(10).
03 QTY-OF-COURSE PIC 9(2).
03 SCORE OCCURS 1 TO 15 TIMES
DEPENDING ON QTY-OF-COURSE PIC 9(3).
4. 表元素的引用。
表:数据不定义,过程不引用。先定义,后引用。
表元素是按一定规律在内存中顺序存放的,所以在引用时必须指出表明和这个元素在表中的位置。
注意:
(1).如果以说明B是一个表,不能直接引用表明B而不加下标。
01 table。
02 B OCCURS 8.
03 C1 PIC X(8).
03 C2 PIC X(2).
MOVE B (1) TO A.
(2).如果表元素是组合项,则引用它的下属的项(可以是初等项或组合项),也必须用下标指明它是哪一个表元素的。如:
MOVE C1 (2) TO A.
(3).如果表元素是组合项,可以对它下属的数据项进行限定。如:
MOVE SPACE TO C1 OF B (2). 表明是B(2)中的C1.
表元素应出现在限定词OF或IN的后面,而不能在他们的前面。
(4).下标只能是整常数或具有整型值的数据名。
(5).下标不能是带下标的数据名,即不能是表元素。
(6).带下标的数据名(表元素)又称下标数据名,是标识符的一种形式。
5.给表元素赋初值。
(1).可以在过程部用READ,MOVE,ADD,COMPUTE等算术运算语句给各表元素赋值。
01 TABLE VALUE IS ZERO
03 A OCCURS 20 PIC 9(3).
表示每个A元素中全放满了零字符。
(2).联合使用OCCURS字句和REDELNES字句来给各个表元素赋初值。
A.现在工作单元节中定义一个组合项,它占的内存的大小和需赋值的表一样,在该组合项中定义若干个数据项,数据项的描述和表的元素相同。
B.然后对这些数据项分别用VALUE字句赋以初值,由于在这些数据项的描述中没有出现OCCERS字句,因此用VALUE赋初值是合法的。这些值就是要欲赋给表元素的初值。
C. 这个组合项重定义成一个表,这样就相当于对这些表元素赋予了初值。
6.例子。
7.用位标(足标)法引用表元素
(1).位标:一种特殊类型的数据,专用于表元素的引用。
(指定表明和下标的方法引用一个表元素,位标)
相对地址 = (表元素序号 – 1 )* 表元素长度
(2).指定方法
数据部中定义一个表时所用的OCCURS字句中要加上“INDEXED BY 位表名”短语来指定。
01 A.
03 X OCCURS 5 PIC X(2) INDEXED BY I.
注意:
A.凡以后需要位标来引用表元素的,都需要在建立表时用“INDEXED BY”短语来制定位标的名字。
B.由于位表是专用于引用表元素的特殊的数据项,它不能用来进行算术运算,他不是记录的一部分,不能在文件节或工作单元节定义。
C.一维表或多维表的每一维按需要可以指定若干个位标名,引用时这些位标名只能在该维内使用。按维定义,按维使用。
D.有时需要把位标的值转存放到另一个数据项中,但由于位标是特殊类型的数据项,so,需要另外定义一种特殊的数据项叫位标数据项,专门存储位标的值,在数据部定义。 用USAGE INDEX子句描述。
(3).SET(设置)语句。
给位表赋值,作用是将一表元素的相对地址放到指定的位标去。如:
SET I TO 10.
将相对地址送到I中,10只是表示表中第10个元素。
SET语句的一般格式之一:
SET 标识符1[,标识符2]/位标1[,位标2]。。。 TO 标识符3/位标3/整数
8.表的检索----SEARCH(检索)语句。
(1).用于顺序检索的SEARCH语句。
表元素排列没有规律,一个个查找,顺序查找。
01 WORKER-REC.
02 WORKER-TABLE OCCURS 50 TIMES INDEXED BY N.
04 NUMB PIC 9(4).
04 AGE PIC X(20).
04 PAY PIC 9(3).
检索:
SET N TO 1.
SEARCH WORKER-TABLE
AT END DISPLAY ‘CANNOT FIND NAME’
WHEN NAME(N) = ‘CHANG SAN’
DISPLAY NAME(N), PAY(N).
注:
SET N TO 1 从第一个元素查起。SET N TO 5 第五个元素查起。
SEARCH 后必须跟一被检索的表名,而且用SEARCH必须用位标发来引用表元素。
SEARCH 语句的一般格式之一:
SEARCH 表名 [VARYING {位标名1/位标符2}][AT END 强制语句1]
WHEN 条件1 {强制语句2/NEXT SENTENCE}
[WHEN 条件2 {强制语句3/NEXT SENTENCE}]……
(2).已排好序的表的SEARCH语句。
折半法。
ASCENDING KEY(升序)和 DESCENDING KEY(降序)
SEARCH 语句格式之二:
PERFORM
PERFORM 过程名1[THRU 过程名2]
VARYING [] FROM BY UNTIL 条件1
AFTER [] FROM BY UNTIL 条件2
AFTER [] FROM BY UNTIL 条件3
SET I UP BY 5
把位标I代表的序号加2,原来指向第10个表元素,现改为指向第12个表元素。
排序与合并
SORT格式一:
(单纯的排序)
SORT 排序中间文件名 ON『ASCENDING/DESCENDING』KEY 数据名1 数据名2.。。。
ON『ASCENDING/DESCENDING』KEY 数据名3 数据名4.。。
USING 输入文件名
GIVING 输出文件名
SORT格式二:
(先处理,后排序)
RELEASE(释放)语句
(作用相当于WRITE,但向排序中间文件上写记录,不能用WRITE).
RELEASE 记录名『FROM 标识符』
RETURN(回收)语句
从排序中间文件读回一个记录到内存。
RETURN 排序中间文件名 RECORD [INTO 标识符]
[;AT END 强制语句]
MERGE 文件名1 ON
{ASCENDING/DESCENING} KEY 数据名1[,数据名2].。。。
【,ON {ASCENDING/DESCENING}KEY 数据名3 [,数据名4].。。。。】。。。。
USING 文件名2,文件名3[,文件名4].。。。。。
1.
242―――244
02 WC-ビットオン PIC 1(001)
VALUE B'1' .
02 WC-ビットオフ PIC 1(001)
1代表什么意思?
BOOL 型的怎么使用
2.
PERFORM 主処理 WITH TEST BEFORE
UNTIL (FLG-入力1-終了 = 1) OR (
FLG-BTM-終了 = 1) .
REPLACING
注意:
读文件用的是文件名,而写文件用的是记录名。
WRITE T AFTER ADVANCING 2 LINES
WRITE T BEFORE ADVANCING 2 LINES.
WRITE T AFTER ADVANCING PAGE. (换页)
WRITE T BEFORE / AFTER ADVANCING 标识符2 / 整数 LINE / LINES
WRITE T BEFORE / AFTER ADVANCING 助忆符 / PAGE