精通cobol--9.3.2 使用OCCURS语句得到的表空间结构

    这里需要说明的是,使用OCCURS语句只是避免了重复书写相类似的定义代码。OCCURS语句并没有压缩定义数据的存储空间。数据的存储空间大小和不使用OCCURS语句时,定义数据的存储空间大小是相同的。

通过下面的图解可以更直观的说明这一点。首先,使用OCCURS语句定义一个普通结构的表,代码如下。

01   TEST-TABLE-TWO             

     05     TEST-ROW           OCCURS 3 TIMES.        

          10     TEST-ITEM-ONE     PIC  X (1).    

          10     TEST-ITEM-TWO     PIC  X (2).  

则对应该表数据的存储结构如图所示。

精通cobol--9.3.2 使用OCCURS语句得到的表空间结构_第1张图片

由此可见,使用表定义的数据存储空间大小和不使用表的大小是一样的。使用表定义的数据存储空间大小的计算公式如下。

( item 1  + item 2 + item 3 + ……  +  item n ) * OCCURS重复的次数 =  空间大小

这里,item 1指数据条目1的存储空间大小。对应于上例,如下代码中的后面PIC(1)中的“1”。

10     TEST-ITEM-ONE     PIC  X (1). 

Item 2指数据条目2的存储空间大小。对应上例,代码中的后面PIC(2)中的“2”。

  10     TEST-ITEM-TWO     PIC  X (2). 

item 3往后依此类推,直到最后一个数据项item n为止。上例中只有两个数据条目,因此item nitem 2。最后,根据以下语句得到OCCURS的重复次数为“3”。

05     TEST-ROW           OCCURS 3 TIMES. 

这样,对比上面计算表空间大小的公式,已经知道了item 1直到item n的大小,同时也知道了OCCURS重复的次数。因此,可根据该公式计算表TEST-TABLE-TWO的存储空间大小如下。

(1 + 2) * 3 = 9                  

对于初学者而言,常常容易忘记在最后乘上OCCURS重复的次数。如果没有乘上OCCURS重复的次数,将得到错误的空间大小如下。

1 + 2 =3                错误的计算方式

以上这种计算方式,只是简单地将各数据条目的大小当作数据项的大小相加。这样做,错误地理解了表的结构意义,忽视了OCCURS语句的存在,失去了表的意义。

 

你可能感兴趣的:(Colorful,life,IT)