改造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的時候,這也應該是需要注意的地方。
轉載于:https://www.cnblogs.com/game-over/articles/891147.html
總結
以上是生活随笔為你收集整理的改造Cobol项目应该注意的几个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wintellect Collectio
- 下一篇: 戏说模式-追MM与设计模式 (转载)