精通cobol--9.16.3 嵌套索引表

  嵌套索引表是将索引表嵌套而生成的表。嵌套索引表每层嵌套的都是一张索引表,因此有多少层嵌套就有多少个索引。下面定义一个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 31

其中括号中各个数字对应的索引如下。

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 31)的偏移量 = 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+3NDX-C-1

此时计算该条数据偏移量大小的式子为。

TABLE-COLUMN    NDX-A+2 NDX-B+3NDX-C-1)的偏移量  =

                              NDX-A在内存中的实际数值大小 + 2 * 200

                           +  NDX-B在内存中的实际数值大小 + 3 * 50

                           +  NDX-B在内存中的实际数值大小 - 1 * 10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值