博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PLI 到 COBOL 的转换-数据类型 【不搞Mainframe的可能看不懂,冷门的语言】
阅读量:6000 次
发布时间:2019-06-20

本文共 3487 字,大约阅读时间需要 11 分钟。

此文非常小众,只是想认识一下圆子里面的做大型机的朋友。文章内容是这几年做语言转换积累来下的资料。全部原创的内容,觉得有些可惜,想给做大型机开发的朋友,不过,也没有专门的地方发表,借园子的人气找点朋友。

资料有800K的Excel和一个VBNET写的自动转换软件。

数据类型整理
数据类型 实例 说明
DCL ENDTR         BIT(1); 1个Bit位,通常用做FLAG
DCL EDSTR         CHAR(99); 字符
DCL MSTWZ00       EXTERNAL ENTRY; 外部程序
DCL MSFILE        RECORD INPUT; 外部文件
DCL MONCNT(3)     FIXED(15); 如果FIXED 没有 BIN 或者 DEC 来修饰
FIXED BIN DCL KBTBL(4)      BIN FIXED(15) ;   2进制数
FIXED DEC(DEC) DCL IPCNT         FIXED DEC(15,0);                        10进制数
DCL DATE          BUILTIN; PL1函数
DCL TENNM         G(20) 日本语项目
DCL YY            PIC'Z9',   编辑用字符
DCL EX1           PTR;  指针
* FUNCTION ,EXTERNAL ENTRY,BIT 在COBOL里面已经废止或者使用其他方法实现
* 数据部中出现的INCLUDE有可能是数据结构,有可能是初始化程序!这个需要通过外部的COPY句情报文件来确定.
数据类型别转换说明
BIT 【COBOL没有对应类型】                                                                        
实例:
DCL ENDTR         BIT(1);
识别方法: 判断是否拥有以 BIT( 开头的单词
参数
INIT
初始值
LENGTH
长度
REPEAT
重复次数,或者是多维数组
COMMENT
注释
NAME
名称
* COMMENT,NAME,REPEAT 为所有成员的共通参数,下面的文档将省略。
转换方法: COBOL的 字符型(X)
* 如果这个BIT型只是长度为1的用做标示的变量,可以简单的用字符型代替。
* 如果这个BIT型是从文件中读取的话,8个BIT作为一个CHAR。然后通过字符转2进制的子程序来作为标志位使用。
PL1:
DCL AAA   BIT(8)   INIT('00000001'B)
COBOL:
01 AAA   PIC X(01) VALUE X'01'. 
CHAR                                                                                      
EXTERNAL ENTRY 【COBOL没有对应类型】                                                                    
实例:
DCL MSTWZ00       EXTERNAL ENTRY;
识别方法: 判断是否拥有 EXTERNAL 和 ENTRY
参数:
不存在
转换方法: 直接删除
* 需要将外部程序名记录下来,在CALL方法时,将做外内部过程,外部程序的判断标准。
标准需要再考虑
FILE 【暂时对应方案不明】                                                                        
实例:
DCL MSFILE        RECORD INPUT;
识别方法:
如果出现单独的 FILE 关键字 ,可以断定是 FILE类型。由于 FILE 关键字可以省略,所以不能使用 FILE 关键字来作为识别的依据。
从文件的读取方式上说,有RECORD单位读取和STREAM流读取两种,从文件的作用上说,有INPUT,OUTPUT和UPDATE,EXTERNAL
如果出现关键字 RECORD 或者 STREAM 的同时,还出现关键字 INPUT 或者 OUTPUT 或者 UPDATE,则可以断定这是个文件定义。
参数
ISPRINT
是否为PRINT类型
FILEFORMAT
RECORD或者STREAM
FILEIO
INPUT,OUTPUT,UPDATE,EXTERNAL
转换方法
       FD %filename                                                             
       RECORD CONTAINS   %length CHARACTERS                                        
       BLOCK CONTAINS   0 RECORDS                                              
       LABEL RECORD    IS STANDARD                                              
       RECORDING MODE IS F.                                                  
       01 %filename-REC   PIC X(%length).                                        
%filename-REC只需要注明程序的长度就可以了,程序不使用这个变量
每个文件,文件状态和结束标志需要定义在数据部里
    01 MSFILE-ST   PIC X(02).                           文件状态标志[可选]            
    01 SYSINX-ST   PIC X(02).                           文件状态标志[可选]            
    01 MSFILE-EOF PIC X(01) VALUE'0'.                                          
    01 SYSINX-EOF PIC X(01) VALUE'0'.                                          
VSAM文件还需要指定 ACCESS MODE,RECORD KEY,ORGANIZATION
FIXED(FIXED BIN,FIXED DEC)                                                                      
* FIXED 如果没有明确的 BIN 或者 DEC 的说明,默认为DEC。
实例:
DCL MONCNT(3)     FIXED(15);
识别方法: 如果只拥有 FIXED 关键字,不管是否拥有 DEC,都作为 FIXED DEC。
如果只拥有 FIXED 关键字,还拥有关键字 BIN, 则作为 FIXED BIN。
参数
INIT
初始值
LENGTH
长度
转换方法
FIXED BIN:
FIXED BIN(15)
PIC S9(4) COMP
FIXED BIN(31)
PIC S9(8) COMP
FIXED DEC:
DEC(n)
PIC S9(n) COMP-3
FIXED DEC(n)
PIC S9(n) COMP-3
FIXED(n) 
PIC S9(n) 
FIXED省略DEC的情况时,COMP-3也省略
* FIXED BIN 暂时不考虑 15,31以外的情况。
FUNCTION 【COBOL没有对应类型】                                                            
实例:
DCL DATE          BUILTIN;
识别方法: 只要拥有 BUILTIN 关键字。
参数:
不存在
转换方法: 直接删除
G                                                                                        
实例:
DCL TENNM         G(20)
识别方法:
拥有关键字 G
参数
INIT
初始值
LENGTH
长度
转换方法:
01 TENNM         PIC G(20)    USAGE DISPLAY-1
* G型初始化或者赋值时候,默认的是加上 0x0E 和 0x0F 。
由于这个原因,G型实际可以存放字符大小和定义大小相差1。如果是N型的话,没有这个问题 需要验证
如果G型拥有初始值的话,如果初始值里有左右括号(可能还有其他未知的符号),或者某些汉字的内码是左右括号的话,会造成编译错误。
建议把所有汉字初始值的地方的单引号用双引号代替(这个问题可能同样出现在其他的VALUE中)
PIC                                                                                      
实例:
DCL YY            PIC'Z9'
识别方法: PIC 关键字
参数:
INIT
初始值
PIC
PIC格式
转换方法: 对于一般PIC格式,可以完全使用PL1的格式
01 YY                        PIC Z9
下面两种情况,必须特别处理
1.带有 "/" 的项目 和 带有 "."的项目
DCL DATE            PIC’9999/99/99'
需要根据将 / 以及 /前后项目拆开
01 YY                        PIC 9999 DATE
 02 YEAR    PIC (4)9
 02 FILLER PIC X INIT('/')
防止初始化
 02 MONTH   PIC (2)9
 02 FILLER PIC X INIT('/')
防止初始化
 02 DAY     PIC (2)9
?需要确认:COBOL里面 / 符号不占位置,PL1里面占位置?
2.带有"Y"的项目
Y的作用是将0转换为空格
Specifies that a zero in the specified digit position is replaced
unconditionally by the blank character
DCL DATE            PIC ‘99Y99’
需要用Z来分开改写
01 DATE.
 02 YEAR    PIC 99.
 02 MONTH   PIC Z99.
        根据项目经验和客户QA的决定,将Y改为9              
* 可能还有其他不能直接转换的情况
* ----9V.999 V 怎么转换,有的情况一律拆分开来?
9999.99.99
PTR                                                                                      
实例:
DCL EX1           PTR;
识别方法: 以 PTR 结尾
参数:
不存在
转换方法: EX1                        USAGE IS POINTER.

转载于:https://www.cnblogs.com/TextEditor/archive/2011/06/17/2083483.html

你可能感兴趣的文章
关于手势处理
查看>>
super
查看>>
5G美洲白皮书:5G开源的现状(pdf)
查看>>
世界移动通信大会
查看>>
Grails通过sessionId获取session对象
查看>>
基于Spring Security Role过滤Jackson JSON输出内容
查看>>
从设计者的角度看 React
查看>>
js常见问题
查看>>
CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
查看>>
怎样使用React Context API
查看>>
71. Simplify Path
查看>>
海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
查看>>
PAT A1043
查看>>
JavaScript之手写Promise
查看>>
PHP_SELF变量解析和重复路径解决
查看>>
git 命令行使用(基础篇)
查看>>
在VUE中利用MQTT协议实现即时通讯
查看>>
Data Lake Analytics: 读/写PolarDB的数据
查看>>
nuxt 简单介绍
查看>>
java Script 的if判断2
查看>>