PLI 到 COBOL 的转换-数据类型 【不搞Mainframe的可能看不懂,冷门的语言】

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

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



数据类型整理






























































































数据类型实例说明








BITDCL ENDTR         BIT(1);1个Bit位,通常用做FLAG








CHARDCL EDSTR         CHAR(99);字符








EXTERNAL ENTRYDCL MSTWZ00       EXTERNAL ENTRY;外部程序








FILEDCL MSFILE        RECORD INPUT;外部文件








FIXEDDCL MONCNT(3)     FIXED(15);如果FIXED 没有 BIN 或者 DEC 来修饰








FIXED BINDCL KBTBL(4)      BIN FIXED(15) ;  2进制数








FIXED DEC(DEC)DCL IPCNT         FIXED DEC(15,0);                       10进制数








FUNCTIONDCL DATE          BUILTIN;PL1函数








GDCL TENNM         G(20)日本语项目








PICDCL YY            PIC'Z9',  编辑用字符








PTRDCL 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以外的情况。



链接:PL1技巧和注意点











































































































































































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 9999DATE














































 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.999V 怎么转换,有的情况一律拆分开来?































9999.99.99








































































































































PTR                                           























































实例:

DCL EX1           PTR;







































识别方法:以 PTR 结尾









































参数:

不存在










































转换方法:EX1                        USAGE IS POINTER.





























































































































  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值