使用任何开源代码或工具将大型机二进制文件转换为 Ascii

Posted

技术标签:

【中文标题】使用任何开源代码或工具将大型机二进制文件转换为 Ascii【英文标题】:Convert Mainframe Binary to Ascii Using any Open Source Code or Tool 【发布时间】:2013-07-03 12:29:35 【问题描述】:

如何通过使用任何 Java API 或开源工具牢记打包和分区十进制格式,将具有 cobol copybook 作为记录布局信息的大型机二进制文件 (EBCDIC) 转换为 ASCII 文件?

【问题讨论】:

查看 jt400.jar,其中包含用于 i/AS400 的此类方法。 【参考方案1】:

用 Java 阅读

如果你想阅读 Java 中的 Mainframe Cobol 文件,请查看

JRecord - 您必须指定字符集(字体)。对于美国 EBCDIC,请使用 CP037。 Legstar - 拥有各种大型机 - Cobol 工具 CB2java - 暂时没有更新(不再支持,有问题)

RecordEditor 还可以让您查看/编辑大型机 Cobol 文件

转换实用程序

对于简单的 Cobol 文件,可以使用这些转换实用程序(基于 JRecord):

CobolToCsv CobolToXml Cobol To Json

记录编辑器

RecordEditor 有一个 Generate 选项,用于生成 Java / JRecord 代码。 见RecordEditor Code Generation notes

注意:我是 JRecord/RecordEditor 的作者

【讨论】:

只是想知道如果 copybook 中的一个字段被定义为 COMP/COMP-4/BINARY 但编写记录的程序是用 TRUNC(BIN) 编译的,那么这些 USAGE 会变成 COMP-5 .修改布局很容易,但您需要知道才能这样做。 对于 JRecord / RecordEditor,它基本上将所有 comp/comp-4/binary 视为 TRUNC(BIN),在大多数情况下这无关紧要。对于许多 Cobols 编译器,Comp 是 Big-Endian,而 Comp-5 是 Native-Binary 格式。在大型机上,两者都是 Big-Endian,对于许多 PC intel 编译器,Comp-5 是 little endian。 嗨,布鲁斯,我使用了 JRecord,但没有找到任何处理重定义子句的选项。在我的情况下,有多个重新定义子句引用相同的内存位置,但只需要使用其中一个来获取预期的数据。此外,对于具有 cobol 数据类型为 PIC S9(5) COMP-3 的特定字段,当我使用 getFieldValue 方法时,COMP-3 会给我输出 f2f0f1。此外,该字段的十六进制值也是 f2f0f1。但是我应该在转换后得到一些十进制值吗?那么这是文件本身的问题还是我应该以其他方式处理它? 嗨@BruceMartin我想为在字帖中具有数据类型S9(6)V9(1)COMP-3的特定字段添加一件事,相应的十六进制值为4040,但转换后我得到输出为 404.0。但我怀疑这里实际上 40 表示 EBCDIC 中的空格字符,所以输出应该是空值吧? 第一个答案: f2f0f1 是 Ebcdic 中的字符“201”。对于 comp-3,数字 123 表示为 x'123c'(来自内存)。所以这个字段值不是 comp-3 值。

以上是关于使用任何开源代码或工具将大型机二进制文件转换为 Ascii的主要内容,如果未能解决你的问题,请参考以下文章

将任何文件转换为二进制字符串并从二进制转换为文件[关闭]

EBCDIC 到 ASCII 转换

将文件转换为 C/C++ 源代码数组的脚本/工具

在java中将字符串转换为压缩十进制

任何二进制文件都可以在php中转换为图像吗

我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?