我们有一个VB(可变长度)记录的EBCDIC文件。与此EBCDIC相对应,我们有copybook,其中记录用01类型&单个记录还包含打包的十进制字段。请建议我们如何将这种EBCDIC文件转换为ASCII。
由于公司安全政策,我们无法安装RecordEditor。我们正在使用JRecord库,我们正在创建这样的对象:ICobolIOBuilder iob = CobolIoProvider.getInstance()
.newIOBuilder(copybookName)
.setCopybookFileFormat(Convert.FMT_MAINFRAME)
.setFileOrganisation(Constant.IO_VB)
.setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL) .setFont("cp037");
之后,当我们使用AbstarctLineReader逐行读取文件时,它会带有许多特殊字符。请建议。
在ebcdicc和其他任何代码页中都没有"打包小数"。打包十进制是一种二进制数字格式,IBM大型机(和其他)处理器通过一组本机机器指令支持这种格式。它是BCD(二进制编码十进制)格式的实现。参见维基百科上的二进制编码十进制。
基础知识
在你做任何事情之前,你需要:
- 工作记录如何区分各种记录类型。它可以是记录开头的一个字段(名称中可以有记录类型)。
- 如果你正在从主机传输文件,你需要小心
转换可能有用的包
RecordEditor应该能够使用Cobol Copybook编辑文件(您需要导入Copybook)。RecordEditor也可以将文件写入Xml。
java项目JRecord及其子项目如CobolToXml可以进行转换。RecordEditor为JRecord提供了一些代码生成选项
最后看一下如何生成Java~JRecord代码
压缩后的十进制,在EBCDIC中是这样的:
005F 005C 005D
第一个值005F
是一个PIC 999 COMP-3无符号值5。每个数字由一个字节表示,最后一个字节是符号字节。每个字节包含两个十进制数字,最右边的字节除外。最右的字节保存左半字节中最右的数字和右半字节中的符号。
第二个值005C
是PIC S999的p -3正值5。
第三个值005D
为PIC S999 COMP-3负值-5。
现在,当你把它转换成ASCII码后,我不知道打包的十进制是什么样子的。您必须将ASCII文件中的一些行以十六进制的形式添加到问题中,这样我们就可以看到转换器做了什么。