COBOL 表处理使用方法
发布时间:2023-09-14 13:10:40 所属栏目:教程 来源:
导读:COBOL中的数组称为表.数组是线性数据结构,是相同类型的各个数据项的集合.表的数据项在内部排序.
表声明
表在数据部门中声明. 发生子句用于定义表. Occurs子句表示重复数据名称定义.它只能用于从02到49的级别编号
表声明
表在数据部门中声明. 发生子句用于定义表. Occurs子句表示重复数据名称定义.它只能用于从02到49的级别编号
COBOL中的数组称为表.数组是线性数据结构,是相同类型的各个数据项的集合.表的数据项在内部排序. 表声明 表在数据部门中声明. 发生子句用于定义表. Occurs子句表示重复数据名称定义.它只能用于从02到49的级别编号.不要使用带有redefines的occurrence子句.一维和二维表的描述如下 : 一维表 在一维表中, occurrence 子句仅在声明中使用一次. WSTABLE是包含表的组项. WS-B命名出现10次的表元素. 语法 以下是定义一个的语法-dimensional table : 01 WS-TABLE. 05 WS-A PIC A(10) OCCURS 10 TIMES. 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A PIC A(10) VALUE 'TUTORIALS' OCCURS 5 TIMES. PROCEDURE DIVISION. disPLAY "ONE-D TABLE : "WS-TABLE. STOP RUN. JCL 执行上述COBOL程序 : //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当您编译并执行上述程序时,它会产生以下结果 : ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS 二维表 创建二维表,两个数据元素都是可变长度.作为参考,请完成语法,然后尝试分析表.第一个阵列(WS-A)可以发生1到10次,内部阵列(WS-C)可以发生1到5次.对于WS-A的每个条目,将有相应的5个WS-C条目. 语法 关注是定义二维表的语法 : 01 WS-TABLE. 05 WS-A OCCURS 10 TIMES. 10 WS-B PIC A(10). 10 WS-C OCCURS 5 TIMES. 15 WS-D PIC X(6). 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A OCCURS 2 TIMES. 10 WS-B PIC A(10) VALUE ' TUTORIALS'. 10 WS-C OCCURS 2 TIMES. 15 WS-D PIC X(6) VALUE ' POINT'. JCL 执行上述COBOL程序 : //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当您编译并执行上述程序时,它会产生以下结果 : TWO-D TABLE : TUTORIALS POINT POINT TUTORIALS POINT POINT 下标 可以使用下标来访问表格中的各个元素.下标值的范围可以是1到表发生的次数.下标可以是任何正数.它不需要在数据分区中声明任何声明.它是使用event子句自动创建的. 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A OCCURS 3 TIMES. 10 WS-B PIC A(2). 10 WS-C OCCURS 2 TIMES. 15 WS-D PIC X(3). PROCEDURE DIVISION. MOVE '12ABCDEF34GHIJKL56MnopQR' TO WS-TABLE. disPLAY 'WS-TABLE : ' WS-TABLE. disPLAY 'WS-A(1) : ' WS-A(1). disPLAY 'WS-C(1,1) : ' WS-C(1,1). disPLAY 'WS-C(1,2) : ' WS-C(1,2). disPLAY 'WS-A(2) : ' WS-A(2). disPLAY 'WS-C(2,1) : ' WS-C(2,1). disPLAY 'WS-C(2,2) : ' WS-C(2,2). disPLAY 'WS-A(3) : ' WS-A(3). disPLAY 'WS-C(3,1) : ' WS-C(3,1). disPLAY 'WS-C(3,2) : ' WS-C(3,2). STOP RUN. JCL 执行上述COBOL程序 : //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当您编译并执行上述程序时,它会产生以下结果 : WS-TABLE : 12ABCDEF34GHIJKL56MnopQR WS-A(1) : 12ABCDEF WS-C(1,1) : ABC WS-C(1,2) : DEF WS-A(2) : 34GHIJKL WS-C(2,1) : GHI WS-C(2,2) : JKL WS-A(3) : 56MnopQR WS-C(3,1) : MNO WS-C(3,2) : PQR 索引 表格元素也可以使用指数.索引是元素从表开头的位移.使用INDEXED BY子句使用Occurs子句声明索引.可以使用SET语句和PERFORM varying选项更改索引的值. 语法 以下是语法在表中定义索引 : 01 WS-TABLE. 05 WS-A PIC A(10) OCCURS 10 TIMES INDEXED BY I. 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A OCCURS 3 TIMES INDEXED BY I. 10 WS-B PIC A(2). 10 WS-C OCCURS 2 TIMES INDEXED BY J. 15 WS-D PIC X(3). PROCEDURE DIVISION. MOVE '12ABCDEF34GHIJKL56MnopQR' TO WS-TABLE. PERFORM A-Para varying I FROM 1 BY 1 UNTIL I >3 STOP RUN. A-Para. PERFORM C-Para varying J FROM 1 BY 1 UNTIL J>2. C-Para. disPLAY WS-C(I,J). JCL 执行上述COBOL程序 : //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当您编译并执行上述程序时,它会产生以下结果 : ABC DEF GHI JKL MNO PQR 设置声明 设置语句用于更改索引值. Set动词用于初始化,递增或递减索引值.它与Search and Search All一起用于定位表中的元素. 语法 以下是使用的语法a Set语句 : SET I J TO positive-number SET I TO J SET I TO 5 SET I J UP BY 1 SET J DOWN BY 5 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TABLE. 05 WS-A OCCURS 3 TIMES INDEXED BY I. 10 WS-B PIC A(2). 10 WS-C OCCURS 2 TIMES INDEXED BY J. 15 WS-D PIC X(3). PROCEDURE DIVISION. MOVE '12ABCDEF34GHIJKL56MnopQR' TO WS-TABLE. SET I J TO 1. disPLAY WS-C(I,J). SET I J UP BY 1. disPLAY WS-C(I,J). STOP RUN. JCL 执行上述COBOL程序. //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当你编译并执行上面的程序时,它产生以下结果 : ABC JKL 搜索 搜索是一种线性搜索方法,用于查找表格内的元素.它可以在已排序和未排序的表上执行.它仅用于由Index短语声明的表.它从索引的初始值开始.如果找不到搜索到的元素,则索引会自动递增1并持续到表格结尾. 示例 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. JCL 执行上述COBOL程序. //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当你编译并执行上面的程序时,它产生以下结果 : LETTER M FOUND IN TABLE 全部搜索 搜索全部是一种二元搜索方法,用于查找表格内的元素.对于"全部搜索"选项,表必须按排序顺序排列.索引不需要初始化.在二进制搜索中,表被分成两半,并确定搜索到的元素的一半存在.重复此过程直到找到元素或达到结束. 示例 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. 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. JCL 执行上述COBOL程序 : //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC pgm = HELLO 当您编译并执行上述程序时,它会产生以下结果 : RECORD FOUND 93 MNO (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |