【问题标题】:EBCDIC to ASCII ConversionsEBCDIC 到 ASCII 转换
【发布时间】:2019-06-04 05:08:54
【问题描述】:

我有 EBCDIC 格式的大型机文件,我想将这些文件转换为 ASCII 格式。

我曾尝试使用 python 2.6 将 EBCDIC 转换为 ASCII,但存在许多问题,例如压缩字段未转换并且记录数增加。

有没有办法将具有压缩字段的 EBCDIC 文件转换为 ASCII 格式。

【问题讨论】:

  • 如果它包含压缩或二进制字段,则不是我所说的 EBCDIC 文件。您最好的选择是:1.)在 unix 端“按原样”处理记录布局和编码,或 2.)将其转换为纯 EBCDIC 文件(没有打包或二进制字段)主机端,然后将其转换为 ASCII。
  • 它不包含打包或二进制字段,它是纯大型机文件,我不知道如何进一步处理
  • 嗯,你所说的“压缩场”是什么?
  • 在字帖中,它的长度被称为 PIC S999V99 [COMP-3]。
  • 正如 Bruce Martin 所说,COMP-3 是一个“压缩十进制”(或短“压缩”)字段 - 包含此数据类型的任何记录都将被任何类型的 EBCDIC->ASCII 转换完全破坏(如果它不知道字帖中定义的记录格式)。

标签: python unix ascii mainframe ebcdic


【解决方案1】:

如果您已经下载了文件,您可以在 Linux 或 MacOS 机器上使用命令行轻松地将其从 EBCDIC 转换为 ASCII。 为此,您需要使用dd 命令。

这里是它使用的一些参数的快速概览:

dd [bs=size] [cbs=size] [conv=conversion] [count=n] [ibs=size] [if=file] [imsg=string] [iseek=n] [obs=s] [of=file] [omsg=string] [seek=n] [skip=n]

上面还有更多参数,要检查所有可用的,只需执行命令:man dd,它将显示所有其他可用参数以及每个参数的说明。

在你的情况下,你应该从:

dd conv=ascii if=EBCDIC_file.txt of=ASCII_file.txt

其中 EBCDIC_file.txt 是输入 EBCDIC 文件的文件名,而 ASCII_file.txt 将是作为输出创建的文件,其中所有字节都从 EBCDIC 转换为 ASCII。

同样,您可以通过使用 conv=ebcdic 将文件从 ASCII 转换为 EBCDIC 来执行相反的操作。

这是dd 在网上的手册页:https://www.man7.org/linux/man-pages/man1/dd.1.html

当您在文件中提到压缩时,您的意思是整个文件是从大型机压缩而来的吗?可能它来自 TERSED(通过在大型机上使用简洁实用程序)。如果是这种情况,那么有一个公共版本的 terse 可以在 DOS、Linux、MacOS、AIX 和其他平台上运行。可在 cbtape 网站上找到:http://www.cbttape.org/ftp/cbt/CBT892.zip

【讨论】:

    【解决方案2】:

    选项

    一些选项

    • 将文件转换为大型机上的文本文件(sort 或 eastrieve 都会这样做)
    • 如果是一次性的,Fileaid/File master 可以将文件转换为大型机上的文本
    • 如果是一次性的,RecordEditor 应该能够使用 Cobol Copybook 编辑文件。它还可以生成JRecord代码来读取文件。

    • 如果文件中只有一个 Record-Type,CobolToCsv 可以使用 Cobol Copybook 将文件转换为 CSV。

    • JRecord 可让您阅读 Java 中的 Cobol Copybook
    • JRecord 有一个 COBOL Copy 实用程序,可让您执行 Cobol 到 cobol 的复制。如果只有一种记录类型,您可以
      • 将 EBCDIC Copybook 复制到等效的 Ascii Copybook(ext 字段已转换,二进制字段保持不变)。如果将 Mainframe Cobol 文件转换为在 Windows / Linux Cobol 系统中使用,这很有用
      • 将 EBCDIC 二进制字帖复制到 Ascii 文本字帖
    • Stingray project 提供对 python 中 cobol 文件的访问

    CobolTCsv

    例如,使用CobolToCsv 将 Cobol 数据文件转换为 Csv(单记录类型):

    java -jar ../lib/Cobol2Csv.jar -I In/DTAR020.bin  -O Out/o_DTAR020_space.csv ^
             -C DTAR020.cbl  ^
             -Q DoubleQuote  -FS Fixed_Length    ^
             -IC CP037 -Delimiter ,
    

    在哪里

    • In/DTAR020.bin是输入Cobol数据文件
    • Out/o_DTAR020_space.csv是输出的Csv文件
    • **DTAR020.cbl ** 是 Cobol Copybook
    • Fixed_Length 表示它是一个固定长度的文件(大型机上的 FB)

    记录编辑器

    【讨论】:

    • 有没有其他方法,比如使用 Unix 或 Python?
    • 在答案中我提到了用 python 编写的 StingRay,Cobol2Csv 也可以在 Unix 中运行(如果你安装了 java)。大型机选项(排序、eaytrieve)可以在 Mainframe~ZOs~Unix shell 下运行。 MicroFocus 可能有在 Unix 下运行的选项,但它们会很昂贵
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多