最近在做一个改造项目,把一个很古老的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项目应该注意的几个问题相关推荐

  1. 在线机房改造类项目建设难点的研究

    摘要 随着IT技术的不断发展,IT设备的运行环境要求越来越高,更新换代的速率也越来越快.其中作为IT系统运行的载体--数据中心,需要持续适应不断提升的运行环境要求. 由于数据中心作为一个建筑,生命周期 ...

  2. 使用 Xunit.DependencyInjection 改造测试项目

    使用 Xunit.DependencyInjection 改造测试项目 Intro 这篇文章拖了很长时间没写,之前也有介绍过 Xunit.DependencyInjection 这个项目,这个项目是由 ...

  3. Session | 基于Session改造oa项目的登录功能

    目录 一:总结域对象 二:基于Session改造oa项目的登录功能 三:oa项目的安全退出系统 一:总结域对象 (1)request(对应的类名:HttpServletRequest) 请求域(请求级 ...

  4. Spring Boot 如何快速改造老项目?

    1 前言碎语 博主公司一个项目在开发中使用某些功能的时候,受限于spring低版本的限制,故索性将整个模块升级为spring boot,在这里做个记录,希望能帮助到有相同场景的朋友. 整个改造过程非常 ...

  5. 用Flutter改造ZS项目小记一:界面显示一张图片

    创建flutter工程 此步骤直接在studio中new Flutter Project 然后下一步即可. 创建程序欢迎界面 创建欢迎界面并一张图片 如何显示这张图片 工程总目录下创建->ass ...

  6. 大数据学习笔记24:利用MR改造Zebra项目

    文章目录 一.提出任务 1.Zebra项目概述 2.日志数据结构分析 3.数据项的含义 3.具体任务 二.准备工作 1.启动hadoop服务 2.上传数据文件到HDFS 3.创建Maven项目MRZe ...

  7. 用Flutter改造ZS项目小记二:跳转至首页

    如何跳转至首页 我们在上一部已经创建了一个只有一个铺满全屏图片的widgit界面,那么我们我们现在想跳转到首页现在需要解决两个问题 如何在launch启动界面呆三秒之后再进行跳转 在flutter中如 ...

  8. Dubbo 改造普通单体项目

    一.新建普通maven项目 1.首先,新建3个普通maven商城项目,模拟以往常见的Java单体应用开发,mall-interface是存放接口和公共代码部分,order-service-consum ...

  9. 项目实战丨某家具公司机房改造方案

    [项目名称] 某家具公司机房改造 [项目设备] [参与微思学员] 参与学员:洪同学 学习课程:思科CCIE,VMware VCP 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证 ...

最新文章

  1. 大学计算机专业选哪个,这么多大学都有计算机专业 究竟选哪个好呢?
  2. 记一次神奇的SQL查询经历,group by慢查询优化
  3. OPPO正式公布ColorOS 6系统:Reno新机4月10日首发适配
  4. Windows编程判断是否为该进程的父进程
  5. 华为hg-526拨号加路由破解简介
  6. 半自动驾驶大对决:特斯拉和凯迪拉克谁是真王
  7. Javascript - demo 与 捷径
  8. CCNA路由协议总结之IGRP
  9. Visual Studio Code 配合 Node.js 轻松实现JS断点调试
  10. C语言2级题pdf百度云,C语言二级考试试题.pdf
  11. 数据结构c语言版算法设计题,数据结构题集(C语言版)算法设计答案
  12. (双硬盘(SSD+HDD)/单硬盘)双系统win10+ubuntu18.04安装记录
  13. Excel 转置分组时如何保留没有对应数据的空组
  14. vue对vue-giant-tree进行节点操作
  15. 360如何查看计算机配置文件,win7中怎么查看路由器配置文件config.bin
  16. day02【Collection、泛型】
  17. 48种数据分析可视化图表
  18. 希捷移动硬盘官方测试软件,2TB厚度仅9.6mm 希捷超薄移动硬盘测试
  19. 7.2_gd-sgd
  20. 使用numpy数组索引方法获取指定行列位置的数值内容

热门文章

  1. Project Chameleon Work In Progress 11
  2. s5-6 Linux 标准输出 系统优化 目录结构
  3. java求质数为什么%3ci 2_C语言程序设计部分习题及例题参考程序
  4. java中循环语句_Java语法基础之循环结构语句详解
  5. 拷贝文件不移动_在不使用 mv 命令的情况下移动文件
  6. 配置审计(Config)配合开启OSS防盗链功能
  7. 搜索 | 电商行业模版驱动业务增长实践
  8. 基于财通证券的数字化建设,总结的金融行业数字化转型方向
  9. 如何让一套代码适配所有iOS设备尺寸?
  10. 5G给边缘计算带来了什么?