zoukankan      html  css  js  c++  java
  • PLI 到 COBOL 的转换数据类型 【不搞Mainframe的可能看不懂,冷门的语言】

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

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



    数据类型整理






























































































    数据类型 实例 说明








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








    CHAR DCL EDSTR         CHAR(99); 字符








    EXTERNAL ENTRY DCL MSTWZ00       EXTERNAL ENTRY; 外部程序








    FILE DCL MSFILE        RECORD INPUT; 外部文件








    FIXED 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进制数








    FUNCTION DCL DATE          BUILTIN; PL1函数








    G DCL TENNM         G(20) 日本语项目








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








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



    链接: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 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.





























































































































  • 相关阅读:
    Codeforces 706B Interesting drink
    hdu 1937 Finding Seats
    poj 2502 Subway
    hdu 1495 非常可乐
    分布式的一些基础知识
    python __new__和__init__
    TCP的time_wait、close_wait状态
    TCP三次握手,四次挥手
    迭代器、生成器
    创建自定义JSR303的验证约束(Creating custom constraints)
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2083483.html
Copyright © 2011-2022 走看看