cobol之旅---基础知识4

2019-04-15 16:52发布

1.表概念。 table 相当于其他算法语言中的数组。表元素 赋值 引用  表处理。   2.表的建立: 如果一个数据名不是代表单一的数据项,而是一个表的名字,则应在数据部中做说明。指出表包含多少个表元素。如: 01 STUDENT-RECORD        02 NAME PIC X(20).        02 COURSE OCCURS 5 TIMES PIC 9(3). 格式: 最简单格式: OCCURS 整数 TIMES 注意: OCCURS后面只能为正整数。 OCCURS不能出现在77层,不能用于01层。 “表”只能定义在记录内部。如果想在一张卡片中包含几个产品的数据,可以在01层下面增加一层,把表定义在这一层上。如: 01  CARD-REC.    02  PRODUCT  OCCURS  4  TIMES.       03  PRODUCT-NUM  PIC  9(4).       03  PRODUCT-NAME  PIC  X(16). COBOL中表元素可以允许为组合项,而且在建立一个多维表的同时,也建立了一维(或二维)表。 ANSI  COBOL 1974允许最多用到三维表。 只有当OCCURS所说明的数据是初等项时,才能在该数据项的描述中使用PIC字句。   3.可变长表 有时一个“表”中需要包含多少个表元素并不是固定的。 一般格式: OCCURS   整数1  TO  整数2   TIMES      DEPENDING   ON   数据名1 01  STUDENT-SCORE-RECORD.     03  NAME  PIC  X(10).     03  QTY-OF-COURSE  PIC  9(2).     03  SCORE  OCCURS  1  TO  15  TIMES                      DEPENDING  ON  QTY-OF-COURSE  PIC  9(3).   4. 表元素的引用。 表:数据不定义,过程不引用。先定义,后引用。 表元素是按一定规律在内存中顺序存放的,所以在引用时必须指出表明和这个元素在表中的位置。 注意: (1).如果以说明B是一个表,不能直接引用表明B而不加下标。 01 table   02 B OCCURS 8.               03 C1 PIC X(8).               03 C2 PIC X(2). MOVE B (1) TO A. (2).如果表元素是组合项,则引用它的下属的项(可以是初等项或组合项),也必须用下标指明它是哪一个表元素的。如: MOVE C1 (2) TO A.   (3).如果表元素是组合项,可以对它下属的数据项进行限定。如: MOVE SPACE TO C1 OF B (2). 表明是B2)中的C1. 表元素应出现在限定词OFIN的后面,而不能在他们的前面。 (4).下标只能是整常数或具有整型值的数据名。 (5).下标不能是带下标的数据名,即不能是表元素。 (6).带下标的数据名(表元素)又称下标数据名,是标识符的一种形式。   5.给表元素赋初值。 (1).可以在过程部用READ,MOVE,ADD,COMPUTE等算术运算语句给各表元素赋值。 01  TABLE    VALUE  IS  ZERO        03  A  OCCURS  20  PIC  9(3). 表示每个A元素中全放满了零字符。 (2).联合使用OCCURS字句和REDELNES字句来给各个表元素赋初值。    A.现在工作单元节中定义一个组合项,它占的内存的大小和需赋值的表一样,在该组合项中定义若干个数据项,数据项的描述和表的元素相同。    B.然后对这些数据项分别用VALUE字句赋以初值,由于在这些数据项的描述中没有出现OCCERS字句,因此用VALUE赋初值是合法的。这些值就是要欲赋给表元素的初值。   C. 这个组合项重定义成一个表,这样就相当于对这些表元素赋予了初值。   6.例子。   7.用位标(足标)法引用表元素 1.位标:一种特殊类型的数据,专用于表元素的引用。 (指定表明和下标的方法引用一个表元素,位标) 相对地址 = (表元素序号   1 * 表元素长度 2.指定方法 数据部中定义一个表时所用的OCCURS字句中要加上“INDEXED BY 位表名”短语来指定。 01    A.     03 X OCCURS 5 PIC X(2)  INDEXED  BY  I. 注意: A.凡以后需要位标来引用表元素的,都需要在建立表时用“INDEXED BY”短语来制定位标的名字。 B.由于位表是专用于引用表元素的特殊的数据项,它不能用来进行算术运算,他不是记录的一部分,不能在文件节或工作单元节定义。 C.一维表或多维表的每一维按需要可以指定若干个位标名,引用时这些位标名只能在该维内使用。按维定义,按维使用。 D.有时需要把位标的值转存放到另一个数据项中,但由于位标是特殊类型的数据项,so,需要另外定义一种特殊的数据项叫位标数据项,专门存储位标的值,在数据部定义。   USAGE INDEX子句描述。 3.SET(设置)语句。 给位表赋值,作用是将一表元素的相对地址放到指定的位标去。如: SET  I  TO  10. 将相对地址送到I中,10只是表示表中第10个元素。 SET语句的一般格式之一: SET 标识符1[,标识符2]/位标1[,位标2]。。。 TO 标识符3/位标3/整数   8.表的检索----SEARCH(检索)语句。 1.用于顺序检索的SEARCH语句。     表元素排列没有规律,一个个查找,顺序查找。  01  WORKER-REC.      02  WORKER-TABLE  OCCURS   50  TIMES  INDEXED  BY  N.         04  NUMB  PIC  9(4).         04  AGE    PIC  X(20).         04   PAY    PIC  9(3). 检索: SET   N  TO  1. SEARCH  WORKER-TABLE     AT END  DISPLAY  ‘CANNOT  FIND  NAME’     WHEN  NAME(N) = ‘CHANG SAN’             DISPLAY  NAME(N),  PAY(N). 注: SET  N  TO 1 从第一个元素查起。SET  N  TO  5   第五个元素查起。 SEARCH 后必须跟一被检索的表名,而且用SEARCH必须用位标发来引用表元素。   SEARCH 语句的一般格式之一: SEARCH  表名 [VARYING {位标名1/位标符2}][AT END 强制语句1]      WHEN  条件1  {强制语句2/NEXT SENTENCE}      [WHEN  条件2  {强制语句3/NEXT SENTENCE}]…… 2.已排好序的表的SEARCH语句。  折半法。  ASCENDING  KEY(升序)和 DESCENDING  KEY(降序) SEARCH 语句格式之二:   PERFORM PERFORM 过程名1[THRU 过程名2]     VARYING []  FROM   BY  UNTIL  条件1     AFTER   []  FROM   BY  UNTIL  条件2     AFTER   []  FROM   BY  UNTIL  条件3   SET   I   UP  BY  5 把位标I代表的序号加2,原来指向第10个表元素,现改为指向第12个表元素。     排序与合并 SORT格式一: (单纯的排序) SORT  排序中间文件名  ONASCENDING/DESCENDINGKEY 数据名1 数据名2.。。。                        ONASCENDING/DESCENDINGKEY 数据名3 数据名4.。。        USING  输入文件名        GIVING 输出文件名   SORT格式二: (先处理,后排序) RELEASE(释放)语句 (作用相当于WRITE,但向排序中间文件上写记录,不能用WRITE). RELEASE  记录名『FROM  标识符』   RETURN(回收)语句 从排序中间文件读回一个记录到内存。 RETURN 排序中间文件名   RECORD  [INTO  标识符] [AT END 强制语句]   MERGE  文件名1  ON       {ASCENDING/DESCENING} KEY 数据名1[,数据名2].。。。       【,ON {ASCENDING/DESCENING}KEY  数据名3 [,数据名4].。。。。】。。。。 USING 文件名2,文件名3[,文件名4].。。。。。     1.                                                                                                                                         242―――244      02  WC-ビットオン                         PIC  1(001)      VALUE B'1' .      02  WC-ビットオフ                         PIC  1(001) 1代表什么意思? BOOL 型的怎么使用                                                                                                                                         2.                                                                                                                                              PERFORM 主処理 WITH TEST BEFORE        UNTIL (FLG-入力1-終了        =  1)   OR  (      FLG-BTM-終了        =  1) .   REPLACING   注意: 读文件用的是文件名,而写文件用的是记录名。 WRITE  T  AFTER  ADVANCING  2  LINES WRITE  T  BEFORE  ADVANCING  2  LINES. WRITE  T  AFTER   ADVANCING  PAGE.  (换页)   WRITE  T  BEFORE / AFTER  ADVANCING  标识符2 / 整数 LINE / LINES WRITE  T  BEFORE / AFTER  ADVANCING  助忆符 /  PAGE