将 VB EBCDIC 文件转换为 ASCII,其中字帖记录以 01 分隔
Posted
技术标签:
【中文标题】将 VB EBCDIC 文件转换为 ASCII,其中字帖记录以 01 分隔【英文标题】:Convert VB EBCDIC file to ASCII, where copybook records are 01 separated 【发布时间】:2021-10-05 10:06:51 【问题描述】:我们有一个包含 VB(可变长度)记录的 EBCDIC 文件。与此 EBCDIC 相对应,我们有副本,其中记录以 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 逐行读取文件时,它会带有许多特殊字符。请就此提出建议。
【问题讨论】:
文件定义看起来可行。special character
听起来您已经完成了从 ebcdic 到 ascii 的转换,但这是行不通的。我建议重新访问文件传输
【参考方案1】:
压缩十进制不是“在 EBCDIC 中”,也不是在任何其他代码页中。压缩十进制是 IBM 大型机(和其他)处理器通过一组本机机器指令支持的二进制数格式。它是BCD(二进制编码的十进制)格式的实现。请参阅***上的Binary coded decimal。
【讨论】:
【参考方案2】:基础知识
在您做任何其他事情之前,您需要:
了解如何区分各种记录类型的记录。它可以是记录开头的字段(名称中可能包含记录类型)。 如果您要从大型机传输文件,则需要小心转化
可能有用的包
RecordEditor 应该能够使用 Cobol Copybook 编辑文件(您需要导入 Copybook)。 RecordEditor 也可以将文件写入 Xml。
java 项目JRecord 及其子项目CobolToXml 可以进行转换。 RecordEditor 有一些JRecord 的代码生成选项
终于来看看how to generate Java~JRecord code
【讨论】:
由于公司安全政策,我们无法安装 RecordEditor。我们正在使用 JRecord 库,我们正在创建像这样的对象: ICobolIOBuilder iob = CobolIoProvider.getInstance() .newIOBuilder(copybookName) .setCopybookFileFormat(Convert.FMT_MAINFRAME) .setFileOrganisation(Constant.IO_VB) .setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL) .setFont(" cp037");之后,当我们使用 AbstarctLineReader 逐行读取文件时,它会带有很多特殊字符。请就此提出建议。 @sachin bansal:以后请通过编辑您的问题来添加更多信息。【参考方案3】:压缩十进制,在 EBCDIC 中,如下所示:
005F 005C 005D
第一个值005F
是 PIC 999 COMP-3 无符号值 5。每个数字由一个字节表示,最后一个字节是符号字节。 每个字节都包含两位十进制数字,除了最右边的字节。最右边的字节在左半字节中保存最右边的数字,在右半字节中保存符号。
第二个值005C
是 PIC S999 COMP-3 正值 5。
第三个值005D
是 PIC S999 COMP-3 负值 -5。
现在,压缩十进制在您将其转换为 ASCII 后看起来如何,我不知道。您必须在问题中添加一些十六进制的 ASCII 文件行,这样我们才能看到转换器做了什么。
【讨论】:
压缩小数永远不应该被字符集转换器触及。您必须非常幸运才能获得可逆转换,在大多数情况下,数据只会被破坏。 您不能将字符转换应用于压缩十进制字段,并希望结果有用。您必须不理会这些字节,并根据压缩十进制字段的规则解释每个字节的二进制值。 @phunsoft:完成以上是关于将 VB EBCDIC 文件转换为 ASCII,其中字帖记录以 01 分隔的主要内容,如果未能解决你的问题,请参考以下文章