精通cobol--9.16.3 嵌套索引表
2008-04-28 10:47
288 查看
嵌套索引表是将索引表嵌套而生成的表。嵌套索引表每层嵌套的都是一张索引表,因此有多少层嵌套就有多少个索引。下面定义一个3层嵌套索引表。
01 NESTED-INDEX-TABLE.
05 TABLE-DEPTH OCCURS 2 TIMES
INDEXED BY NDX-A.
10 TABLE-ROW OCCURS 4 TIMES
INDEXED BY NDX-B.
15 TABLE-COLUMN OCCURS 5 TIMES
INDEXED BY NDX-C
PIC X (10).
以上定义的嵌套索引表是3层嵌套的,因此也可被称为三维表格。其中的每一维度相当于这里每一层嵌套的数据项。其中每层数据项所占存储空间大小如下。
q 对于第一层嵌套数据项TABLE-COLUMN而言,空间大小为10个字节。并且该数据项重复出现5次。
q 对于第二层嵌套数据项TABLE-ROW而言,空间大小为5个第一层嵌套数据项的总和。由于第一层嵌套数据项TABLE-COLUMN的大小为5个字节。因此,TABLE-ROW所占空间大小通过以下代数式得出:
5字节(TABLE-COLUMN的大小)* 10 (TABLE-COLUMN的重复次数)= 50字节
q 对于第三层嵌套数据项TABLE-DEPTH而言,同样可得到其空间大小为:
50字节(TABLE-ROW的大小)* 4 (TABLE-ROW的重复次数)= 200字节
计算以上嵌套索引表中各层嵌套数据的空间大小,主要是为了下面计算数据偏移量。结合前面所学知识,索引表中的索引在内存中存储的是所引用数据的偏移量。此偏移量的大小即索引在内存中所存储的真实数值。
下面,首先类似嵌套下标表,对以上嵌套索引表中任意引用一条数据如下。
TABLE-COLUMN (2 ,3,1)
其中括号中各个数字对应的索引如下。
q 2对应索引变量NDX-A,即第三层嵌套索引变量。
q 3对应索引变量NDX-B。即第二层嵌套索引变量。
q 1对应索引变量NDX-C。即第一层嵌套索引变量。
结合前面计算得到的各层嵌套数据的空间大小。
q 第三层嵌套数据项TABLE-DEPTH每条大小为200字节。
q 第二层嵌套数据项TABLE-ROW每条大小为50字节。
q 第一层嵌套数据项TABLE-COLUMN每条大小为10字节。
得到该条数据的实际偏移量为。
TABLE-COLUMN (2 ,3,1)的偏移量 = (2 * 200 + 3 * 50 +1*10)字节 = 560字节
其中,此时各个index变量在内存中的实际数值大小分别如下所示。
q NDX-A实际数值为2*200=400
q NDX-B实际数值为3*50=150
q NDX-C实际数值为1*10=10
此外,有时还常常对嵌套索引表中的数据以如下方式进行引用。
TABLE-COLUMN (NDX-A+2 ,NDX-B+3,NDX-C-1)
此时计算该条数据偏移量大小的式子为。
TABLE-COLUMN (NDX-A+2 ,NDX-B+3,NDX-C-1)的偏移量 =
NDX-A在内存中的实际数值大小 + 2 * 200
+ NDX-B在内存中的实际数值大小 + 3 * 50
+ NDX-B在内存中的实际数值大小 - 1 * 10
01 NESTED-INDEX-TABLE.
05 TABLE-DEPTH OCCURS 2 TIMES
INDEXED BY NDX-A.
10 TABLE-ROW OCCURS 4 TIMES
INDEXED BY NDX-B.
15 TABLE-COLUMN OCCURS 5 TIMES
INDEXED BY NDX-C
PIC X (10).
以上定义的嵌套索引表是3层嵌套的,因此也可被称为三维表格。其中的每一维度相当于这里每一层嵌套的数据项。其中每层数据项所占存储空间大小如下。
q 对于第一层嵌套数据项TABLE-COLUMN而言,空间大小为10个字节。并且该数据项重复出现5次。
q 对于第二层嵌套数据项TABLE-ROW而言,空间大小为5个第一层嵌套数据项的总和。由于第一层嵌套数据项TABLE-COLUMN的大小为5个字节。因此,TABLE-ROW所占空间大小通过以下代数式得出:
5字节(TABLE-COLUMN的大小)* 10 (TABLE-COLUMN的重复次数)= 50字节
q 对于第三层嵌套数据项TABLE-DEPTH而言,同样可得到其空间大小为:
50字节(TABLE-ROW的大小)* 4 (TABLE-ROW的重复次数)= 200字节
计算以上嵌套索引表中各层嵌套数据的空间大小,主要是为了下面计算数据偏移量。结合前面所学知识,索引表中的索引在内存中存储的是所引用数据的偏移量。此偏移量的大小即索引在内存中所存储的真实数值。
下面,首先类似嵌套下标表,对以上嵌套索引表中任意引用一条数据如下。
TABLE-COLUMN (2 ,3,1)
其中括号中各个数字对应的索引如下。
q 2对应索引变量NDX-A,即第三层嵌套索引变量。
q 3对应索引变量NDX-B。即第二层嵌套索引变量。
q 1对应索引变量NDX-C。即第一层嵌套索引变量。
结合前面计算得到的各层嵌套数据的空间大小。
q 第三层嵌套数据项TABLE-DEPTH每条大小为200字节。
q 第二层嵌套数据项TABLE-ROW每条大小为50字节。
q 第一层嵌套数据项TABLE-COLUMN每条大小为10字节。
得到该条数据的实际偏移量为。
TABLE-COLUMN (2 ,3,1)的偏移量 = (2 * 200 + 3 * 50 +1*10)字节 = 560字节
其中,此时各个index变量在内存中的实际数值大小分别如下所示。
q NDX-A实际数值为2*200=400
q NDX-B实际数值为3*50=150
q NDX-C实际数值为1*10=10
此外,有时还常常对嵌套索引表中的数据以如下方式进行引用。
TABLE-COLUMN (NDX-A+2 ,NDX-B+3,NDX-C-1)
此时计算该条数据偏移量大小的式子为。
TABLE-COLUMN (NDX-A+2 ,NDX-B+3,NDX-C-1)的偏移量 =
NDX-A在内存中的实际数值大小 + 2 * 200
+ NDX-B在内存中的实际数值大小 + 3 * 50
+ NDX-B在内存中的实际数值大小 - 1 * 10
相关文章推荐
- 精通cobol--9.13 查找索引表语句SEARCH
- 精通COBOL--11.7.2 嵌套子程序的调用权限
- 精通cobol--9.11.1 为何要使用索引表
- 精通cobol--9.11.2 如何定义索引表
- 精通cobol--9.14 查找索引表语句SEARCH ALL
- 精通cobol--9.11.5 索引表和下标表的比较
- 精通cobol--9.16.2 嵌套下标表
- 精通COBOL--11.7 嵌套子程序
- 精通cobol--9.2 下标表
- 精通cobol--9.3.1 OCCURS语句的使用方法
- 精通cobol--9.5 表的初始化
- 精通cobol--9.6.4 直接查找方式的适用范围
- 精通cobol--9.9 三种查找方式的比较和总结
- 精通cobol--9.10.4 统计计算小结
- 精通cobol--9.15 定长表和变长表
- 精通cobol--9.17 小结
- 精通COBOL--11.2.2 子程序的调用顺序
- 精通COBOL--11.4.3 被调用程序中的入口地址
- 精通COBOL--16.2 CICS编译处理过程
- 精通COBOL--16.3.4 输出过程中的光标定位