我有一个可变长度的EBCDIC数据文件。
在这个文件中,它包含二进制数据(comp)、压缩十进制数据(comp-3)、显示数字(pic(9))和字符串(pic (x))。
如何使用Java、Perl或COBOL等语言将其转换为ASCII ?
首先,您需要验证该文件是否仍然是EBCDIC。一些文件传输程序会自动将EBCDIC转换为ASCII,这会破坏COMP和COMP-3字段。您可以通过在字母数字字段中查找空格字符来直观地验证这一点。EBCDIC空间是x'40'。ASCII空格为x'20'。
假设文件是EBCDIC,您必须编写三个独立的转换。COMP到ASCII, COMP-3到ASCII,字母数字到字母数字。记录中的每个字段都必须单独提取和转换。
字母数字到字母数字的转换基本上是字母和数字的查找表。查找EBCDIC字符并将其替换为ASCII字符。
COMP是二进制格式。通常是4字节或8字节
COMP-3是带有符号字节的压缩十进制格式。符号字节通常跟在数字后面,但并非总是如此。例如,124看起来像x'124F'。最后一个字节是一个符号字段,x' c '是无符号的(正),x' d '是负的,x' f '是正的。
您需要单独处理每个字段。不能转换COMP字段。您可以使用所选语言提供的方法转换字符字段。
是的,这是可能的(java看JRecord项目)。Jrecord可以使用Cobol copybook在Java中读取文件。它也可以使用Xml描述。
警告在做其他事情之前
- 确保文件仍然是Ebcdic! !。如果文件经过EBCDIC到ASCII的转换,comp/comp-3字段将被损坏。
- 您将文件描述为可变长度。这是否意味着它有可变长度的记录?如果是这样,请确保RDW选项被用来传输文件!!
如果不正确完成文件传输*你最终会浪费大量的时间,然后重新做你已经做过的事情。
Cobol Copybook
我假设你能得到一本Cobol copybook。如果是这样
- 尝试使用RecordEditor编辑文件。这里有一个过时的答案。我会尽量提供一个最新的答案。 你可以在RecordEditor中生成Skelton Java/JRecord。参见如何为Cobol copybook生成java~jrecord代码
JRecord项目JRecord项目将使用
读写Cobol数据文件- A Cobol Copybook
- Xml文件描述
- Java中定义的文件架构
有3个子项目可用于转换简单Cobol文件CSV, Xml或Json文件。更复杂的文件需要Java/JRecord
- CobolToCsv
- CobolToXml
- CobolToJson
JRecord CodeGen
JRecord CodeGen将生成示例Java/JRecord代码来从Cobol Copybook中读取/写入Cobol文件(包括大型机Cobol)。JRecord CodeGen被RecordEditor用来生成Java/JRecord程序。