精通cobol--9.15.2 如何定义变长表

  变长表是本节要讨论的重点内容。当表中数据数目不确定时,就要使用变长表。变长表中的数据数目根据程序中执行的具体情况而确定。定义变长表时,主要是通过在OCCURS语句后加上DEPENDING ON选项实现的。另外,此处的OCCURS语句后通常不再是一个具体的数字,而是一个范围大小。定义变长表最关键的语句为。

X  OCCURS  x1 TO x2  TIMES  DEPENDING ON  Y.

完整的定义方式如下。

01   VARIABLE-TABLE-ONE.

     05   FIELD-ONE         OCCURS  1 TO 9  TIMES

                               DEPENDING ON TABLE-LENGTH-ONE.

          10  VARI-NUM-ONE     PIC 9(5).

          10  VARI-DATA-ONE    PIC X(10).

     05   TABLE-LENGTH-ONE        PIC  9.

以上定义的变长表,表中数据条目最少为1条,最多为9条。具体的数据条目数通过整型变量TABLE-LENGTH指定。可以看到,定义变长表时关键用到以下这条语句。

此外,关于变长表的定义方式,还有以下几点需要特别注意。

1.变长表的起始长度可以从0开始

当变长表的长度为0时,该表为空表,空表不包含任何数据。空表只是定义了一个表的结构,表中数据可在程序中根据实际情况添加。该情况下的定义语句如下。

01   VARIABLE-TABLE-TWO.

     05   FIELD-TWO         OCCURS  0 TO 9  TIMES

                               DEPENDING ON TABLE-LENGTH-TWO.

          10  VARI-NUM-TWO     PIC 9(5).

          10  VARI-DATA-TWO    PIC X(10).

     05   TABLE-LENGTH-TWO        PIC  9.

2.变长表的终止长度必须大于起始长度

对于这一点,也就是说OCCURS语句中第2个操作数必须大于第1个操作数。例如,对于下面这段代码,就是错误的。

01   VARIABLE-TABLE-ERR1.

     05   FIELD-ERR1         OCCURS  5 TO 2  TIMES     ←错误。变长表的终止长度必须大于起始长度

                               DEPENDING ON TABLE-LENGTH-ERR1.

          10  VARI-NUM-ERR1         PIC 9(5).

          10  VARI-DATA-ERR1        PIC X(10).

     05   TABLE-LENGTH-ERR1        PIC  9.

3.变长表DEPENDION ON选项后变量的内容必须合法

这一点也是初学者在开发过程中常常容易忽视的。如果DEPEDNING ON选项后的变量非法,程序将非正常结束。例如以下代码就是错误的。

01   VARIABLE-TABLE-ERR2.

     05   FIELD-ERR2               OCCURS  1 TO 9  TIMES

                                     DEPENDING ON TABLE-LENGTH-ERR2.

          10  VARI-NUM-ERR2         PIC 9(5).

          10  VARI-DATA-ERR2        PIC X(10).

     05   TABLE-LENGTH-ERR2        PIC X   VALUE ‘A’.   ←此处错误。

以上代码中的DEPENDING ON选项后的变量为TABLE-LENGTH-ERR2。该变量用于指定该变长表的实际长度大小。然而该变量却被定义为字符型变量,内容为字符“A”,因此是错误的。

同样,下面这段代码虽然将控制变长表长度的变量定义为整型变量。但该变量所保存的内容超出了变长表长度的范围,仍然是错误的。代码如下。

01   VARIABLE-TABLE-ERR2.

     05   FIELD-ERR3               OCCURS  1 TO 5  TIMES

                                     DEPENDING ON TABLE-LENGTH-ERR3.

          10  VARI-NUM-ERR3         PIC 9(5).

          10  VARI-DATA-ERR3        PIC X(10).

     05   TABLE-LENGTH-ERR2        PIC 9   VALUE  9.    ←此处错误。

4OCCURS后也可只出现一个数字。

该情况下的定义代码为。

01   VARIABLE-TABLE-TWO.

     05   FIELD-TWO           OCCURS   9  TIMES

                                DEPENDING ON TABLE-LENGTH-TWO.

          10  VARI-NUM-TWO     PIC 9(5).

          10  VARI-DATA-TWO    PIC X(10).

     05   TABLE-LENGTH-TWO        PIC  9  VALUE 5.

由于变长表的实际长度是根据DEPENDING ON后面的变量指定的。因此,对于以上变长表,实际长度为5,而不是9

你可能感兴趣的:(精通cobol--9.15.2 如何定义变长表)