COBOL课件第6章表的处理

上传人:E**** 文档编号:91277430 上传时间:2019-06-27 格式:PPT 页数:37 大小:459.50KB
返回 下载 相关 举报
COBOL课件第6章表的处理_第1页
第1页 / 共37页
COBOL课件第6章表的处理_第2页
第2页 / 共37页
COBOL课件第6章表的处理_第3页
第3页 / 共37页
COBOL课件第6章表的处理_第4页
第4页 / 共37页
COBOL课件第6章表的处理_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《COBOL课件第6章表的处理》由会员分享,可在线阅读,更多相关《COBOL课件第6章表的处理(37页珍藏版)》请在金锄头文库上搜索。

1、COBOL 语言程序设计,第六章 表处理,6.1 概述 6.2 创建表 6.3 可变长表 6.4 引用表元素 6.5 为表元素赋初值 6.6 程序举例 6.7 用位标法引用表元素 6.8 检索表 6.9 用PERFORM检索表,6.1 概述,COBOL语言中的表(TABLE)类似于其他高级语言中的数组 (ARRAY)。,6.1 概述,01 student-record. 02 wang. 03 math pic 9(4). 03 eng pic 9(4). 02 zhang. 03 math pic 9(4). 03 eng pic 9(4). 02 zhu. 03 math pic 9(4)

2、. 03 eng pic 9(4).,如果有100个人呢, 如果人更多呢? 难道定义100次? 为解决这种重复性工作,我们可 以用一个统一的名字去代表那些 地位、作用和描述相同的数据项 ,这就是“表”。,6.1 概述,表名为Student,有100个表元素,类似于数组元素 表中,序号(即指出表中第几个元素)称为下标,相对地址 (相对于表中第一个元素的字节地址)称为位标,下标和 位标统称为“出现号”。,6.2 创建表,格式:OCCURS 整数TIMES (在数据部中说明) 举例:01 STUDENT-RECORD. 02 STUDENT OCCURS 100 TIMES. 03 MATH PIC

3、 9(4). 03 ENG PIC 9(4). 进一步简化: 03 COURSE OCCURS 2 TIMES. 这样又建立了一个表“COURSE”,它的元素需要两个下标才 能确定,因此是一个二维表。如果要找第三个学生的英语成 绩,则:COURSE (3, 2) , 第一个下标是指第几个学生,第二个下标指出第几门成绩。,6.2 创建表,01 TABLE. 02 A1 OCCURS 5 TIMES. 03 B1 PIC X(3). 03 B2 OCCURS 10 TIMES PIC 9(4). 03 B3 OCCURS 8 TIMES. 04 C1 PIC 9(6). 04 C2 OCCURS

4、20 TIMES PIC 99. 04 C3 PIC 9(4). 03 B4 PIC X(3). 02 A2 PIC X(5). 02 A3 PIC X(10).,6.2 创建表,1)A1,B1,B4是一维表,引用表元素只需一个出现号。 如:A1(3),B1(5),B4(1)等。 2)B2,B3,C1,C3是二维表。引用它们需用两个出现号。 如:B2(5,3), B3(4,8), C1(2,7), C3(1,8)等。 3)C2是一个三维表。引用时需用三个出现号。如: C2(4,3,1)。 4)A2, A3不是“表名”,而是普通的初等数据项。,6.2 创建表,可以定义多维表 定义二维表 01 S

5、TU-GRADE. 02 STU-REC OCCURS 20 TIMES. 03 STNO 9(9). 03 GRADE OCCURS 5 TIMES PIC 9(3). 单条记录长 (953)20 480 byte,6.2 创建表,注意: a. OCCURS 后面只能是正整数,保留字TIMES可以省略 b. OCCURS不能出现在01层;也不能出现在77层,因为77层是孤立 的数据项 c. 用OCCURS定义的可以是初等项,也可以是组合项 d. 在建立多维表的同时,自动生成低维的表等 e. 不是所有的COBOL版本都支持多维 f. 组合项无论是否使用OCCURS,都不能使用PIC子句,6.2

6、 创建表,注意: g. 不能同时用OCCURS和VALUE子句为所有表元素赋初值 02 A OCCURS 5 PIC 99 VALUE 12 /错 带OCCURS的数据项的下属项也不能有VALUE子句 01 A OCCURS 5. 02 B PIC 99 VALUE 12. /错 h. 表元素在内存中以行进行排列,以二维表为例: A (1, 1) A (1, 2) A(2, 1) A (2, 2),6.3 可变长表,当一个“表”中需要包含的元素个数并不固定时,例如,每个学生的成绩记录中选修的课程数目不同,要对成绩分别记录,此时使用变长表 格式: OCCURS 整数1 TO 整数2 TIMES

7、DEPENDING ON 数据名 例如: 01 STU-GRADE. 03 STNO 9. 03 QTY-OF-COURSE PIC 9. 03 GRADE OCCURS 1 TO 9 TIMES PIC 9(3) DEPENDING ON QTY-OF-COURSE. QTY-OF-COURSE可以在本记录中定义,也可以用77定义为孤立项,6.4 引用表元素,表必须在数据部中先定义,才能在过程部中引用 各个表元素按规律在内存中顺序存储,引用时必须指出表名和这个元素在表中的位置,如:A (2) 如果是二维表,两个下标之间用一个或多个空格隔开,或者用一个逗号加一个以上空格分割,括弧外侧要留空格,

8、内侧不必留空格,如:A (1, 1) 或 A (1 1),6.4 引用表元素,引用举例: 77 A1 PIC 9(3) 77 A2 PIC X(6) 01 TABLE. 02 B OCCURS 5. 03 C1 PIC 9(3). 03 C2 PIC X(3). 注意: a. 引用B时,必须使用下标,如: MOVE B (3) TO A2 b. 引用组合项的下属项,如C1时,也必须加下标,如: MOVE C1 (3) TO A1 或者 MOVE C1 OF B (3) TO A1,6.4 引用表元素,c. 表元素应出现在限定词OF或IN的后面,不能出现在它们之前 如: MOVE B (3) O

9、F TABLE TO A2 /错 d. 下标只能是整型常数或数据项,但不能是表达式,如: B ( N ) 合法 B (N+2) 非法 e. 下标不能是表元素,如: B ( A (1) ) 非法,8.5 为表元素赋初值,不能在一个数据项的描述体中同时使用OCCURS子句和VALUE子句为表元素赋初值 可以在过程部使用MOVE,COMPUTE等语句为表元素赋值,但这要占用运行时间 赋初值方法1:对整个表赋初值 01 T VALUE ABCDEF. 02 T1 OCCURS 3 TIMES PIC X(2). 该方法适用于表元素较少,且元素长度较短的情况,6.5 为表元素赋初值,赋初值方法2:巧妙使

10、用REDEFINES子句 a. 在工作单元节定义一个组合项,其大小和需要赋值的表相同; 在该组合项中定义若干数据项,其描述和表元素相同 b. 对这些数据项分别用VALUE子句赋初值,即要赋给表的初值 01 T. 02 T1 PIC X(8) VALUE 03015555. 02 T2 PIC X(8) VALUE 03026666 02 T3 PIC X(8) VALUE 03038888 c. 用REDEFINES子句将该组合项定义成一个表 01 T-REC REDEFINES T. 02 TABLE OCCURS 3. 03 CLASS PIC 9(4). 03 NUM PIC 9(4).

11、,6.6 程序举例(1),有一批货物,其货物号和单价如下: 0001 000200 0002 000500 0003 000350 0004 000300 0005 005300,6.6 程序举例(2)实验九,有一批货物,其货物号和单价如下: 0010 0200 0020 0400 0030 0600 0040 0800 0050 1000 从文件中读入一批顾客购货记录(日期,货号,顾客号,购货数量) ,根据上述单价表,计算出购货所需款项,输出到新文件,新文件包括:日期,货号,顾客号,购货数量,单价,销售款数,6.7 用位标法引用表元素,6.7.1 概述 6.7.2 定义位标 6.7.3 设置

12、位标 6.7.4 用位标引用表元素,6.7.1 概述,位标(index)是一种特殊类型的数据,专用于表元素的引用 在计算机系统中,以表的第一个元素的第一个字节作为相对地址0,位标就是所指定元素的第一字节的相对地址,即它对表的起始位置的位移量 例如:某个表包含10个元素,每个元素占3个字节,则第一个元素从相对地址0开始,第二个元素从相对地址3开始,依此类推 相对地址计算公式: 相对地址 (表元素的序号1) 表元素的长度,6.7.2 定义位标,在数据部中定义表时OCCURS子句后加上“INDEX BY 位标名”短语,如: 01 TABLE. 02 A OCCURS 5 PIC X(2) INDEX

13、ED BY N. 位标的写法与下标类似,如:A (N),N是位标名 注意: a. 位标N不需要在数据部进行描述,系统自动为其分配内存空间 b. 如果没有指定INDEXED BY短语,则将N视为下标处理 c. 位标是特殊的数据项,不能用于算术运算和输出,6.7.2 定义位标,d. 多维表中每一维可以定义若干个位标,只能在该维中使用 01 A. 02 B OCCURS 4 INDEXED BY N1, N2. 03 C OCCURS 5 INDEXED BY K1,K2. 则:B (N1) , C (N1, K2) 合法,B (K1) 非法 e. 可以将位标的值存放在位标数据项中,它在数据部用US

14、AGE子句 定义,不能用PIC子句指定数据类型和长度,如: 77 K USAGE IS INDEX 或者 77 K INDEX,6.7.3 设置位标,位标是特殊的数据项,不能用MOVE和算术语句赋值,必须使用SET语句为其赋值 格式1: SET 位标 TO 标识符 | 位标2 | 整数 例如: 77 D PIC 99 VALUE 5. 77 K INDEX. 01 A. 02 B OCCURS 10 PIC X(10) INDEXED BY I, J. 02 C OCCURS 10 PIC X(5) INDEXED BY M,N SET I TO 5 /将B表第5个元素的相对地址送入I SET

15、 I TO D /同上 SET D TO I /将相对地址I转换成元素序号后送入D SET J TO I /将相对地址I直接送入J(简单传送) SET M TO I /将I转换成序号 SET K TO M /将相对地址M直接传送给K,例: 01 A. 02 B OCCURS 10 PIC X(10) INDEXED BY I,J. 02 C OCCURS 10 PIC X(2) INDEXED BY K,L. 1)SET I TO J. J的值直接传送给I. 2)SET J TO 5. (5-1)10=40 J 3) SET I TO D. (D的值-1)10 I 4) 77 P INDEX.

16、 P被定义为位标数据项。 SET P TO I. 位标I的值直接传送给P。 5) SET J TO P. P的值直接传送给J。 6) SET D TO I. I的值化成表元素的序号再传送给D。 7) SET L TO I. 如I值为90,它表示B表第10个表元素(90101),再 求出C表中第10个元素相对地址: (10-1)2=18,最后将18 L。,6.7.3 设置位标,格式2:用于增减位标值 SET 位标1, 位标2 UP BY | DOWN BY 整数 | 标识符 例如: SET I UP BY 2 /将元素序号增2 注意: 不能用位标数据项直接引用表元素,必须先将其赋给位标后,通过位标引用,如上例: B (K),C (K) /非法 SET I TO K B (I) /合法 SET M TO K C

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号