精通cobol--9.11.5 索引表和下标表的比较

  为加深对索引表的理解,同时也对之前学习过的下标表作一个回顾,现将二者进行比较。索引表和下标表既有不同之处,也有相似之处,下面分别进行讲解。

1.索引表和下标表的不同之处

索引表和下标表主要有4点区别,以下分别讲解。

1)定义方式不同。依据前面学过的知识,对于下标表,除定义表的基本结构外,还要定义一个下标下标。定义下标表的代码通常如下。

01  sample-subscripted-table.             

    05  item-list          OCCURES x1 TIMES.

      10  item-num      PIC 9(x2).

      10  item-data      PIC X(x3).

05  sub               PIC 9(x4)     USAGE IS COMP.    /*此处定义下标*/

对于索引表而言,则需要指明相应的索引。这里需要再次强调一下,索引表中的索引只用指明,不需要定义。索引的存储位置和存储空间大小是由COBOL系统本身管理的,程序员不必去理会。定义索引表的代码通常如下。

01  sample-indexed-table.

05    item-list    OCCURS  x1  TIMES

                    INDEXED BY  data-ndx.               /*此处是指明索引变量,不是定义*/

      10   item-num     PIC 9(x2).

      10   item-data     PIC X(x3).

2)下标变量和索引变量类型不同。下标表是通过下标变量管理的,索引表是通过索引变量管理的。此二种变量类型的不同也是下标表和索引表的一个重要区别。

下标变量本身是一个整型数据变量。因此,同其他的整型数据变量一样,可对其使用MOVE语句操作和运算符语句操作。

例如,以下代码都是正确的。

MOVE subscript TO data-field.

MOVE data-field TO subscript.

ADD 3 TO subscript.

COMPUTE subscript = (5+7) / 3.

……

因此,可以看出下标变量除用于引用下标表中数据时,还可用于其他操作。也就是说,可以将下标变量当作一个通常的整型数据变量进行任何相应的操作。

然而,前面已经讲到,索引变量是不能直接对其使用MOVE语句和运算符语句的。索引变量是一个特殊的数据类型,由COBOL系统本身管理,只能用于引用索引表中的数据。除此之外,索引变量不能用于其他任何操作。

3)适用语句不同。对下标表进行操作,实际上通常是对其中的下标变量进行操作。因此,下标表的适用语句也可看作是下标变量的适用语句。适用语句通常有以下几条。

q      MOVE语句

q      PERFORM VARYING语句

q      ADD语句

q      SUBTRACT语句

q      MULTIPLY语句

q      DIVIDE语句

q      COMPUTER语句

同样,适用于索引表的语句也可认为是适用于索引变量的语句。适用于索引表的语句有一些和适用于下标表的是一样的,但更多的则并不相同。通常,适用于索引表的语句有下面这几条。

q      PERFORM VARYING语句

q      SET语句

q      SEARCH语句

q      SEARCH ALL语句

4)查找效率不同。索引表的查找效率通常要高于下标表的查找效率。这通常可以从两个方面体现出来。下面分别对此进行介绍。

一方面,索引表用来查找的索引变量访问效率要高于下标表中对应的下标。虽然下标变量可以通过在定义后面使用USAGE IS COMP来提高访问效率,如下。

05   sub   PIC 9(x1) USAGE IS COMP.

或者简写为。

05   sub   PIC 9(x1) COMP.

但即使是通过这种方式提高了访问效率,其效率仍然还是没有索引的高。由于索引变量是直接有COBOL系统本身来管理的,因此具有最高的访问效率。

另一方面,在索引表中可以方便地进行二分查找。前面已经讲到,二分查找方式是从算法角度来讲最高效的查找方式。因此,索引表的查找效率通常要高于下标表的查找效率。

2.索引表和下标表的相似之处

索引表和下标表最大的相似之处在于对数据的引用格式。二者都是通过在数据条目名称加上相应的索引名或下标名,完成对具体数据项的引用。对于下标表,引用数据的方式如下。

item-data   ( sub ).

对于索引表,引用数据的方式如下。

item-data  (index).

 

你可能感兴趣的:(精通cobol--9.11.5 索引表和下标表的比较)