COBOL语言数据文件格式其转换

更新时间:2024-03-20 作者:用户投稿原创标记本站原创 点赞:5878 浏览:21045

【摘 要】COBOL(COmmonBusinessOrientedLanguage)是第一个广泛使用的高级编程语言.五角大楼在企业管理中,数值计算并不复杂,但数据处理信息量却很大.为专门解决经企管理问题,1959年5月,五角大楼委托格雷斯.霍波(G.Hopper)博士领导一个委员会并由RearAdmiralGraceHopper公司主持开发,并于1961年由美国数据系统语言协会公布.经不断修改、丰富完善和标准化,已发展为多种版本.作者对COBOL语言的数据文件格式进行了分析.

【关 键 词】COBOL语言;数据文件;格式;分析转换

0.引言

Cobol作为面向商用的程序设计语言,已经存在了50多年.以这种语言编写的软件广泛应用于银行金融证券和政府部门,其代码量几乎占到世界所有软件代码总量的30%.这些软件运行多年并且随着用户的需求和计算平台的变迁不断发展.然而管理和维护这些关键业务系统却逐渐变成了用户的沉重负担.一方面,熟悉此类古老语言的维护人员短缺,另一方面旧系统很难和新的业务需求整合.

重新开发新系统取而代之将是耗时和昂贵的.一个可能的解决方案就是将这些旧系统迁移到像Ja和.这样的新的语言或平台上来.如何将Cobol数据迁移到新的平台,并且保持原Cobol代码的功能等价成为遗产代码迁移必须解决的基本问题之一.

1.COBOL语言存储文件结构分析

我们通过对大量COBOL数据文件进行分析,并对比原始数据发现:COBOL数据文件一般由文件头、文件体(记录块)和文件尾组成,文件体中各记录连续存放且每条记录长度相同,文件头和文件尾根据文件组织方式和存取方式而有所不同.COBOL语言的数据类型分字符串型和数值型两种,字符串型在数据文件中以ASCⅡ码形式存放,数值型根据描述不同而采用ASCⅡ码或8-4-2-1Ben码存放.

2.COBOL语言数据类型转换方法

用法子句(USAGE子句)使用用法(USAGE)子句可以使程序设计者自由选挥数据杯内存中的存放形式.譬如,数据项A和B是需要多次进行运算,如果用外部十进制形式则来回转换会大大降低运算速度,这时,可以选择A和B为定点二进制形式或内部浮点形式.如果数据项C和D轻加运算次数少,而且需要多次打印出C和D的结果,这时用外部十进制比较适合,因为它最适合打印的要求,不必再进行转换.USAGEISDISPLAY/COMPDISPLAY(标准数据形式.一个字节放一字符)COMP定点二近制形式COMP-1:内部短浮点形式COMP-2:内部长浮点形式COMP-3:内部十进制形式如果对组合项描述为某一种存放形式,则表示这个组合项的下属各初等项都是这种形式.USAGE子句指定的数据存放形式不应与PIC子句指定的数据类型矛盾.长、短浮点形式己确定了内存的长度,不应再用PIC子句.用WRITE语句输出时,是直接按内存中存放数据形式输出(不加转换的),这是和用DISPLAY语句时不同的.


目前,这些工作大多数是在IBMES9000主机的SAFE应用系统平台上进行,该系统联机程序和联机计息程序是用IBM370汇编语言实现的.本文介绍一种用COBOL语言实现字符型X(3)与内部十进制数据相互转换的方法.

2.1由X(3)型转换为内部十进制

由于日期数据总是大于零,在COBOL语言的工作单元节定义变量DATE-FIRST后,再追加定义COBOL语言的最小数据单元X‘000C’,即十进制12.由于重定义DATE-CASE为DATE-CHANGE后,DATE-CHANGE是原日期数据的1000倍,于是要在过程部将DATE-CHANGE除以1000.

首先,在COBOL程序WORKING-STORAGESECTION.中定义如下内容.

WORKING-STORAGESECTION.

01DATE-CASE.

02DATE-FIRSTPICX(3).

02DATE-SIGNPIC9(4)COMPVALUE12;定点二进制数.

01DATE-CHANGEREDEFINESDATE-CASEPIC9(9)COMP-3;内部十进制数据

01DATE-HEXPICX(3);转换前数据.

01DATE-DECPICS9(7)COMP-3;转换后数据.

然后,在过程部PROCEDUREDEVISION.中加入如下语句.

PROCEDUREDEVISION.

MOVEDATE-HEXTODATE-FIRST.

COMPUTEDATE-CHANGE=DATE-CHANGE/1000.

MOVEDATE-CHANGETODATE-DEC.

2.2由内部十进制转换为X(3)型

在进行相反的转换时,要消除因COBOL语言数据类型标志“C”引起的原日期数据前多加的一个0,所以需要将转换数据乘以10,再取出前6位数据即可.

首先,在COBOL程序WORKING-STORAGESECTION.中定义如下内容.

WORKING-STORAGESECTION.

01WORK-DATEPICS9(7)COMP-3.

01AAREDEFINESWORK-DATE.

02A1PICX(3).

02A2PICX(1).

01DATE-HEXPICX(3);转换后数据.

01DATE-DECPICS9(7)COMP-3;转换前数据.

然后,在过程部PROCEDUREDEVISION.中加入如下语句即可.

PROCEDUREDIVISION.

MOVEDATE-DECTOWORK-DATE.

COMPUTEWORK-DATE=WORK-DATE*10.

MOVEA1TODATE-HEX.

3.结论

数据类型转换是遗产代码迁移首先必须面临解决的基本问题之一,然而如果不能注意到隐含在数据类型中丰富的语义,而只是根据源语言和目标语言所提供的基本类型的数据表示范围进行简单的类型映射,片面追求转换的快捷和方便,那么损失源程序的功能等价性,导致潜在的软件bug将是不可避免的.需要指出的是,对于不同的COBOL规范和不同的编译器版本,其数据文件的格式可能会有不同程度的差异.

【参考文献】

[1]刘东升.如何用VC实现COBOL系统的数据到SQLServer的迁移[J].电脑编程技巧与维护,2001,(06).

[2]马天蔚.从数据管理到信息管理――IBM推出针对大型机的DB2新版本[J].每周电脑报,2004,(11).

[3]孙绍法,张建永.COBOL语言数据文件格式分析及其转换[J].铁路计算机应用,2000,(05).