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