精通cobol--9.11.3 索引的特点

  理解索引表,最重要是要理解索引的概念。下面结合一个使用索引表定义的银行账户信息,具体分析索引的特点。定义该索引表的代码如下。

01  BANK-ACCOUNT-TABLE.

05    ACCOUNT-DATA    OCCURS  10  TIMES

                           INDEXED BY  ACC-NDX.              

      10   ACCOUNT-NUM     PIC 9(9).

      10   ACCOUNT-NAME   PIC X(10).

以上代码中,ACC-NDX即为该索引表的索引。对于ACC-NDX而言,主要有下面几个特点,或者说是需要注意的地方。

1.索引不用被直接定义

通过上面代码可以看到,被显示定义的只有两项数据,即ACCOUNT-NUMACCOUNT-NAME。其中ACCOUNT-NUM为银行账户的号码,作为表中的数据编号。ACCOUNT-NAME为该账户的姓名,是实际数据。

ACCOUNT-NUM被定义为一个含有9位数字的整型数据,定义代码如下。

10   ACCOUNT-NUM     PIC 9(9).

ACCOUNT-NAME被定义为一个含有10个字符的字符型数据,定义代码如下。

10   ACCOUNT-NAME   PIC X(10).

相比较而言,索引变量ACC-NDX则没有如上进行定义。ACC-NDX既不像ACCOUNT-NUM那样被定义为一整型数据;也不像ACCOUNT-NAME那样被定义为一字符型数据。

既然没有被定义,那么,ACC-NDX是否因此不占用内存空间呢?答案是否定的。实际上,ACC-NDX是直接由COBOL系统本身存储在某一内存单元上的。ACC-NDX是占用内存空间的,但作为程序员并不用理会它存储在何处。

2.不能对索引使用MOVE赋值操作

以上谈到,索引作为一个特殊的数据,是不用在数据部DATA DIVISION中进行定义的。同时,它的特殊之处还表现在不能对其使用MOVE语句。

对于本例中的索引变量ACC-NDX而言,下面的代码是错误的。

MOVE 5 TO ACC-NDX.                ←错误的用法,索引不能用MOVE语句进行赋值操作

这段代码企图将整型数据赋值给索引 变量ACC-NDX。然而,ACC-NDX作为一个特殊的索引变量,是不允许对其使用MOVE语句进行赋值操作的。

同样,下面这段代码企图将一个变量中保存的数据赋值给ACC-NDX,也是错误的。原因仍然是不能对索引变量使用MOVE语句。代码如下。

MOVE TEST-DATA TO ACC-NDX.                ←错误的用法,索引不能用MOVE语句进行赋值操作

下面这段代码企图将ACC-NDX中的数据赋值给另外一个变量,同样也是错误的。其代码如下。

MOVE  ACC-NDX  TO  PL-DATA.                ←错误的用法,索引不能用MOVE语句进行赋值操作

3.不能对索引使用算术运算符号语句

对索引变量ACC-NDX使用前面章节中讲到的算术运算也是不允许的。例如,下面几行代码都错误地对ACC-NDX进行了算术运算操作。

ADD 3 TO ACC-NDX.

SUBTRACT DATA-SUB FROM ACC-NDX.

MULTIPLY ACC-NDX BY 5 GIVING RESULT-DATA.

COMPUTER ACC-NDX = (2+3) * 5.

……

那么,如何对索引变量进行赋值操作或算术运算呢?这就需要使用到SET语句。关于SET语句,将在后面章节进行详细讲解。

你可能感兴趣的:(精通cobol--9.11.3 索引的特点)