关于表的基本用法

COBOL里的表类似于c中的数组,但更接近c中的结构体,因为里面的元素可以定义不同的类型。

一维表的定义:

 

*定义数组,数组名称为WS-DATA,共五个
          01 WS-TABLE.
             05 WS-DATA PIC A(4) VALUE 'DATA' OCCURS 5 TIMES.
*一维标的遍历:
          DISPLAY 'ONE-D TABLE:' WS-TABLE.

二维表的定义:

      *二维表,更像c中的结构式,结构内元素可以定义不同的数据类型。
          01 WS-TABLE2.
              05 WS-TA OCCURS 10 TIMES.
                 10 WS-TB PIC A(10) VALUE ''.
                 10 WS-TC OCCURS 5 TIMES .
                    15 WS-TD PIC 9(6) VALUE '1'.
      *遍历全部二维表,相当于两重for循环,先运行外层,遍历内层,再运行外层,。。。                                                                                                                                                                                                
          DISPLAY 'ERWEIBIAO:'WS-TABLE2.
          
          DISPLAY 'WS-TABLE2: 'WS-TABLE2.
          DISPLAY 'WS-TA(1):'WS-TA(1).
          DISPLAY 'WS-TC(1,1):'WS-TC(1,1).
          DISPLAY 'WS-TC(1,2):'WS-TC(1,2).

 

二维表遍历的方法:

          01 WS-TABLE3.
              05 WS-T3A OCCURS 3 TIMES INDEXED BY I.
                 10 WS-T3B PIC A(2).
                 10 WS-T3C OCCURS 2 TIMES INDEXED BY J.
                    15 WS-T3D PIC X(3).
                    15 WS-T3D PIC X(3).
          01 TAI PIC 9(1) VALUE '1'.
          01 TAJ PIC 9(1) VALUE '2'.
          MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE3.
      *相当于两重for循环,分别以I和J自增为下标,另索引可直接用定义常量,不是必须将索引定义在表中
          PERFORM D-PARA VARYING I FROM 1 BY 1 UNTIL I>3
          STOP RUN.
          D-PARA.
          PERFORM E-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
          E-PARA.
          DISPLAY 'WS-T3C('I','J'):'WS-T3C(I,J).
      *用定义的TAI和TAJ 也能当作下标来找出对应的值
          DISPLAY '-------------------'.
          DISPLAY 'WS-T3C('TAI','TAJ'):'WS-T3C(TAI,TAJ).

 

SET 语句:用于更改索引值,Set词用于初始化,递增或递减索引值。它与search和search all一起使用可以定位表中的元素。

应该是相当于for循环中int i=0;;i++的角色。

          SET I J TO 1.
          DISPLAY WS-T3C(I,J).
          SET I J DOWN BY 1.
          DISPLAY 'I.J:'I J.
          DISPLAY WS-T3C(I,J).
        STOP RUN.

 

 SEARCH 与Search all语法

SEARCH语法,类似于c中的strchr函数,表可以是无序的,原理经过遍历整个表,找出指定字符,另只能寻找一个字符,对字符串无效。
IDENTIFICATION DIVISION. PROGRAM
-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A PIC X(1) OCCURS 18 TIMES INDEXED BY I. 01 WS-SRCH PIC A(1) VALUE 'M'. PROCEDURE DIVISION. MOVE 'ABCDEFGHIJKLMNOPQR' TO WS-TABLE. SET I TO 1. SEARCH WS-A AT END DISPLAY 'M NOT FOUND IN TABLE' WHEN WS-A(I)=WS-SRCH DISPLAY 'LETTER M FOUND IN TABLE' END-SEARCH. STOP RUN.

Search all 语法:

类似与二分法,寻找指定字符或字符串,所以表一定是有序的。

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
*下面一行一定要注意长度,不要超过有效长度,不然会报错。
05 WS-RECORD OCCURS 10 TIMES ASCENDING KEY IS WS-NUM INDEXED BY I. 10 WS-NUM PIC 9(2). 10 WS-NAME PIC A(3). PROCEDURE DIVISION. MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO WS-TABLE. SEARCH ALL WS-RECORD AT END DISPLAY 'RECORD NOT FOUND' WHEN WS-NUM(I)=93 DISPLAY 'RECORD FOUND ' DISPLAY WS-NUM(I) DISPLAY WS-NAME(I) END-SEARCH.

 

posted @ 2020-11-04 14:19  山水有相逢  阅读(206)  评论(0编辑  收藏  举报