COBOL中关于数组的操作

原文地址:COBOL中关于数组的操作 作者:基股传话

一.表的概念

COBOL语言中的表(TABLE)类似于其他高级语言中的数组(ARRAY)。

表中,序号称为下标,相对地址称为位标,下标和位标称为“出现号”。

 

二.表的建立(OCCURS子句)

    格式:OCCURS  整数  TIMES

    举例:01  PRODUCT-RECORD.

             03 RODUCT  OCCURS  20  TIMES.

              04 QUANTITY-OF-PRODUCTION  PIC  9(6).

              04 QANTITY-OF-SALES  PIC  9(6).

              04 QANTITY-OF-HAND  PIC  9(6).

    说明:1。OCCURS子句不能出现在77层,因为77层是独立的数据项。

          2.OCCURS子句不能用于01层。

          3.只有当OCCURS所说明的数据是初等项时,才能在该数据项的描述中使用PIC子句。

          4.不能用VALUE子句对表赋初值,不能同时用OCCURS子句和VALUE子句来描述同一数据项。

 

三.可变长表

    格式:OCCURS  整数1  TO  整数2  TIMES  DEPENDING  ON  数据名1

    说明:根据数据名1的值来确定数据项重复的次数。

 

四.表元素的引用

    格式:表名(下标)

    说明:1。如果B是一个表,不直接引用表名B而不加下标。

          2.如果表元素是组合项,则引用它下属的项(可以是初等项或组合项),也必须用下标指明它是属于哪一个表元素的。

          3.如果表元素是组合项,可以用它对下属的数据项进行限定。

          4.下标只能是整常数或具有整型值的数据名。

          5.下标不能是带下标的数据名,即不能是表元素。

 

五.给表元素赋初值

  1.对包括所有表元素的整个表赋给一个初值,这时可以对表的描述体上面一层的数据项赋一个初值即可。

     例1:01  TABLE  VALUE  IS  ZERO.

            03     OCCURS  20  PIC  9(3).

     例2:01  T  VALUE’ABCDEFHIJ’.

           02       Q  OCCURS  3  PIC  X(3).

          这样,Q(1),Q(2),Q(3)的内容分别是ABC,DEF,HIJ。

  2.联合使用OCCURS子句和REDEFINES子句来给各个表元素赋值。

     步骤:(1)先在工作单元节中定义一个组合项,它占的内存的大小和需赋值的表一样,在该组合项中定义若干个数据项,数据项的描述和表的元素相同。

          (2)然后对这些数据项分别用VALUE子句赋以初值,由于在这些数据项的描述中没有出现OCCURS子句,因此用VALUE赋初值是合法的(VALUE子句和OCCURS子句不能同时用来描述一个数据项)。这些值就是要赋给表元素的初值。

          (3)把这个组合项重定义为一个表。

 

六.用位标法引用表元素

  1.位标的概念:位标的值表示表元素在该表中的相对位置(以字节数表示)。

  2.位标名的指定方法:在数据部中定义一个表时所用的OCCURS子句中要加上“INDEXED BY 位标名”短语来指定。

     说明:(1)由于位标是专门用于引用表元素的特殊数据项,它不能用来进行算术运算。

          (2)一维表或多维表的每一维按需要可以指定若干个位标名,引用时这些位标名只能在该维内使用。

          (3)有时需要把位标的值转存到另一个数据项中,但由于位标是特殊类型的数据项,因此,需要另外定义一种特殊的数据项叫位标数据项,用来专门存储位标的值。位标数据项在数据部中定义。描述位标数据项用USAGE子句。例如:77 K USAGE IS INDEX.

 

七.SET(设置)语句

    1.作用:将一表元素的相对地址放到指定的位标去。

          如: SET  I  TO 10.

          表示将位标I置位到第10个元素的第一个字节的相对地址上去。

2.格式一

       SET  标识符1[,标识符2]……  TO  标识符3/位标3/整数

            位标1[,位标2]……

       规则列表(设SET  A  TO  B)

-发送项B

-接收项A

整数

数值初等项

位标名

位标数据项

数值初等项

不合法

不合法

将位标代表的序号传送

不合法

位标名

将整数(序号)化成相对地址传送

同左

(1)如果两个位标名指向同一个表,则转换成另一表的相对地址再传送,即将发送项代表的表元素顺序号减1,乘以接收项相关表元素的长度,再传送

简单传送

位标数据项

不合法

不合法

简单传送

简单传送

 

3.  格式二

SET  位标1 [,位标2]……  UP/DOWN  BY  标识符/整数

作用:给位标增减一个量。

 

八.表的检索

  1.用于顺序检索的SEARCH语句

     格式:SEARCH  表名[VARYING  位标名1/标识符2][AT  END  强制语句1]

              WHEN  条件1  强制语句2/NEXT SENTENCE

             [WHEN  条件2  强制语句3/NEXT SENTENCE]……

     举例:SET  N  TO  1.

           SEARCH  WORKER-TABLE

                 AT  END  DISPLAY‘CANNOT  FIND  NAME’

               WHEN  NAME(N)=‘ZHANG  SHENG’

                    DISPLAY  NAME(N),PAY(N).

            ……

      SEARCH语句是这样执行的:从指定的表元素开始,检查是否满足WHEN后面指定的条件。如不满足,就使N增值,自动执行一个SET  N  UP  BY  1。使N指向下一个元素的地址,如果查到某一个元素满足指定的条件时,查表工作立即停止,执行WHEN字句中条件后面的语句。

  2.用于有序表的SEARCH语句(折半法检索)

    (1)说明升(降)序的一般格式为:

         ASCENDING/DESCENDING  KEY  IS  数据名1[,数据名2]……

                ASCENDING/DESCENDING  KEY  IS  数据名3[,数据名4……]……

         举例:02  BOOK-TABLE  OCCURS  100

                  ASCENDING  KEY  IS  NAME

                  DESCENDING KEY  IS  COD

                  INDEX  BY  N.

    (2)SEARCH语句的一般格式(之二)

         SEARCH  ALL  表名[;AT END  强制语句1]

                 WHEN  条件  强制语句2/NEXT SENTENCE

         举例:SEARCH  ALL  BOOK-TABLE

                     AT  END  DISPLAY’CANNOT  FIND  NAME’

                     WHEN  NAME(N) = ‘COMPUTER  DESIGN’

DISPLAY  NAME (N),NUM (N).

九.用PERFORM语句对表进行检索

    最多可以处理三重循环

    格式:

PERFORM  过程名1[THRU 过程名2]

    VARYING  位标名1/下标名1  FROM  位标名2/常量1/标识符1  BY 常量2/标识符2  UNTIL  条件1

    AFTER  位标名3/下标名2  FROM  位标名4/常量3/标识符3  BY 常量4/标识符4  UNTIL  条件2

    AFTER  位标名5/下标名4  FROM  位标名6/常量5/标识符5  BY 常量6/标识符6  UNTIL  条件3

你可能感兴趣的:(COBOL中关于数组的操作)