改造Cobol项目应该注意的几个问题

最近在做一个改造项目,把一个很古老的Cobol项目改造为PL/SQL项目。

在最开始的Cobol代码解析的时候,由于对Cobol语言特点的不熟悉,造成了到测试阶段的一些麻烦。

下面就关于Cobol里面字符型,数值型的用法和区别。

以下的说明基于下述变量:

       01 T-DECIMAL      PIC  9(04)V9(2).
       01 T-DECIMAL-R  REDEFINES  T-DECIMAL.
               03 T-DECIMAL1   PIC  X(04).
               03 T-DECIMAL2   PIC  X(02).
       01 T-CHAR        PIC  X(04).
       01 T-INTEGER      PIC  9(02).
       01 T-DECIMAL-ED   PIC  9999.99.
       01 T-EDIT         PIC   X(08).

1)初始化

Cobol语言中的字符型声明如下:

01 T-CHAR        PIC  X(04).

01 T-INTEGER      PIC  9(02).

声明两个变量,一个是四位的字符,一个是两位的数值。

在调用初始化语句之前,这两个变量的值都是类似于NULL的。

在调用了INITIALIZE语句,对这两个变量初始化之后,字符串的T-CHAR被初始化成了四个空格,

而数值型的T-INTEGER被初始化为两个0。

以上可知,字符型的变量会被初始化为满位的空格,而数值型的变量会被初始化为满位的0。

2)赋值

下面看一下赋值的情况。

MOVE 123456789 TO T-CHAR.

DISPLAY T-CHAR.
ADD 123 TO  T-INTEGER

DISPLAY T-INTEGER.

第一个显示的是1234,第二个显示的是23。

可知,Cobol在处理数值型的时候,如果位数不够,会把前面的舍去,而字符型的是把后面的舍去。

上面的是位数过多的情况,位数不足的情况怎么样呢?

MOVE 12 TO T-CHAR.
DISPLAY T-CHAR.
MOVE 123.45 TO T-DECIMAL.
DISPLAY T-DECIMAL1.

第一个显示的是12  ,第二个显示的是0123,
很有意思的,字符型的会在后面补空格,而数值型的会在前面补0。

3)特殊情况

一个是转型,一个是数值型的运算。

MOVE  1234.56 TO     T-DECIMAL.
MOVE  T-DECIMAL   TO  T-DECIMAL-ED.
MOVE  T-DECIMAL-ED   TO  T-EDIT.
DISPLAY T-DECIMAL.
DISPLAY T-EDIT.
MOVE 98 TO T-INTEGER.
ADD 1 TO T-INTEGER.
DISPLAY T-INTEGER.
ADD 1 TO T-INTEGER.
DISPLAY T-INTEGER.

打出来的依次是:+123456,1234.56,+99,+00。

应该说,这个结果是很出乎我的意料的。

T-DECIMAL没有问题,在内存中是不会存储小数点的,打出来+123456时可以理解的。

但是经过转型变换之后,T-EDIT竟然会打印出来小数点,这个很是奇怪,不过事实就是这样,

我个人的估计是Cobol在处理这样的转型的时候,自己加上了小数点。

后面的两个,特别是最后一个,应该还是比较容易理解的。

99加上1就是100,但是这个变量只有两位,把前面的1舍去,就成了00。

这个地方在有运算的时候应该尤其注意。

这是在解析Cobol代码的时候需要注意的地方,同样的,在转换为PL/SQL的时候,这也应该是需要注意的地方。

posted on 2007-09-12 21:38  Game_over  阅读(1286)  评论(0)    收藏  举报