首页 » 技术分享 » COBOL 知识点集锦(下)

COBOL 知识点集锦(下)

 
COBOL <wbr> <wbr>知识点集锦(下) cobol子程序调用

内部子程序
    IDENTIFICATION DIVISION.
    PROGRAM-ID. PROC-A.
    ENVIRONMENT DIVISION.
    ...
    DATA DIVISION.
    ...
    PROCEDURE DIVISION.
    ...
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROC-B.
       ENVIRONMENT DIVISION.
       ...
       DATA DIVISION.
       ...
       PROCEDURE DIVISION.
       ...
       END PROGRAM PROC-B.
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROC-C.
       ENVIRONMENT DIVISION.
       ...
       DATA DIVISION.
       ...
       PROCEDURE DIVISION.
       ...
           IDENTIFICATION DIVISION.
           PROGRAM-ID. PROC-D.
           ENVIRONMENT DIVISION.
           ...
           DATA DIVISION.
           ...
           PROCEDURE DIVISION.
           ...
           END PROGRAM PROC-D.
       END PROGRAM PROC-C.
    END PROGRAM PROC-A.
    程序A包含B,C两个子程序,其中C又包含子程序D。
    A能调用B,C。C能调用D。B不能调用C,A不能调用D。
    如果C声明为公用的,则B可以调用C,语法为:
    PROGRAM-ID. PROC-C IS COMMON PROGRAM.

    当前函数中定义的变量都只是对当前函数有效。可以用GLOBAL声明为对所有函数有效。
    01 DATA-NAME IS GOLBAL ...
    文件也有此声明:FD FILE-NAME IS GOLBAL ...

    如果调用的不是本程序中的文件或变量,则可以用EXTERNAL声明。
    FD FILE-NAME IS EXTERNAL.../01 DATA-NAME IS EXTERNAL...

    CALL PROC VAR1 [ON EXCEPTION CODE1] [NOT ON EXCEPTION CODE2] END-CALL.
    如果找不到PROC程序名,执行CODE1(如果有此声明),找到将参数VAR1传递给PROC,并执行。PROC返回时执行CODE2(如果有此声明)。
    参数应该在文件,工作存储或连接节中定义,应为01层数据项,77层数据项或基本数据项。
    子程序要返回调用程序,执行EXIT PROGRAM

    传递参数有3步:
    首先在调用程序的CALL语句列出要传递的参数。
    CALL PROC VAR1 .
    然后在被调用程序的过程部标题,使用USING短语列出相应的参数。
    PROCEDURE DIVISION USING VAR1.
    最后在被调用程序的连接节(LINKAGE SECTION)提供参数的存储空间。 
    LINKAGE SECTION.
    01 VAR1 PIC XX.

    参数传递有2中方式:
    BY CONTENT    传递的参数值只在被调用函数中被改变,调用函数中的值不变。
    BY REFERENCE. 传递的参数值在被调用函数中被改变,调用函数中的值也改变。
    CALL PROC VAR1 BY CONTENT/REFERENCE.

    再次调用子程序,子程序处于上次退出的状态(除了连接节中的数据),打开的文件依然打开。
    可以用INITIAL声明函数被调用时处于初始状态。
    PROGRAM-ID. PROC-C IS INITIAL PROGRAM.

    如果不想每次执行都初始化,只在需要的时候初始化,可以用CANCEL PROC.初始化PROC程序,但不执行PROC。

cobol 知识点集锦

COBOL <wbr> <wbr>知识点集锦(下) COBOL数据类型
        计息是银行的一项重要业务,包括日常代理客户收、付计算客户利息和年度计息等。目前,这些工作大多数是在IBM ES9000主机的SAFE应用系统平台上进行,该系统联机程序和联机计息程序是用IBM 370汇编语言实现的。为方便汇编语言读写,在VSAM文件存储的数据中,数据存放格式进行了特殊的定义。如日期存放采用X(3)型,01年03月15日,存入EBCD码为X‘010315’。在进行年度计息时,为了实现各种复杂的运算工作,一般采用COBOL语言来实现各种运算。而采用COBOL语言读取X(3)型数据时,读出的是字符型数据,不能直接进行运算,必须转换为COBOL数据类型的数据后才能进行相应处理。如刚才的X‘010315’,需要转换为内部十进制数据X‘0010315C’。本文介绍一种用COBOL语言实现字符型X(3)与内部十进制数据相互转换的方法。
由X(3)型转换为内部十进制
由于日期数据总是大于零,在COBOL语言的工作单元节定义变量DATE-FIRST后,再追加定义COBOL语言的最小数据单元X‘000C’,即十进制12。由于重定义DATE-CASE为DATE-CHANGE后,DATE-CHANGE是原日期数据的1000倍,于是要在过程部将DATE-CHANGE除以1000。
首先,在COBOL程序WORKING-STORAGE SECTION. 中定义如下内容:
WORKING-STORAGE SECTION.
01 DATE-CASE.
02 DATE-FIRST PIC X(3).
02 DATE-SIGN PIC 9(4) COMP VALUE 12.;定点二进制数
01 DATE-CHANGE REDEFINES DATE-CASE PIC 9(9) COMP-3. ;内部十进制数据
01 DATE-HEX PIC X(3). ; 转换前数据
01 DATE-DEC PIC S9(7)COMP-3 . ; 转换后数据
然后,在过程部PROCEDURE DEVISION.中加入如下语句:
PROCEDURE DEVISION.
MOVE DATE-HEX TO DATE-FIRST .
COMPUTE DATE-CHANGE = DATE-
CHANGE / 1000.
MOVE DATE-CHANGE TO DATE-DEC.
由内部十进制转换为X(3)型
在进行相反的转换时,要消除因COBOL语言数据类型标志“C”引起的原日期数据前多加的一个0,所以需要将转换数据乘以10,再取出前6位数据即可。
首先,在COBOL程序WORKING-STORAGE SECTION. 中定义如下内容:
WORKING-STORAGE SECTION.
01 WORK-DATE PIC S9(7) COMP-3.
01 AA REDEFINES WORK-DATE.
02 A1 PIC X(3).
02 A2 PIC X(1).
01 DATE-HEX PIC X(3). ;转换后数据
01 DATE-DEC PIC S9(7) COMP-3.
;转换前数据
然后,在过程部PROCEDURE DEVISION.中加入如下语句即可:
PROCEDURE DIVISION.
MOVE DATE-DEC TO WORK-DATE。
COMPUTE WORK-DATE=WORK-DATE*10.
MOVE A1 TO DATE-HEX .

转载自原文链接, 如需删除请联系管理员。

原文链接:COBOL 知识点集锦(下),转载请注明来源!

0