等。目前,这些工作大多数是在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.
;转换前数据