【问题标题】:Generating Record Layouts for EBCDIC Data Files.为 EBCDIC 数据文件生成记录布局。
【发布时间】:2012-05-14 16:21:29
【问题描述】:

我们正在尝试用 Perl 编写一个工具,该工具可以解析固定长度的 EBCDIC 数据文件,并通过查看记录中每个字节的十六进制值来生成记录布局。

假设每个数据文件,由我们没有源代码的 Cobol 程序编写,可以有多个记录布局。该工具的目的是通过生成布局来执行数据迁移(EBCDIC 到 ASCII),然后将其馈送到转换器。

问题在于每个字节可能会出现数百种排列和组合。我认为比较当前记录下方记录中相应字节的十六进制值可能会给我们一些关于这可能是什么的线索。但即使在这种情况下,也没有可能得出的具体解决方案。需要在可能影响最终结果的每个关键时刻做出决定。

有人可以让我知道我可以寻找的任何上述模式吗?例如,对于所有 COMP-3,每个半字节都可能表示 0-9 之间的值,因此字节的十六进制值可能类似于 [0-9][0-9]。本质上,对于数据迁移,人们不必担心 COMP 和 COMP-3,因为它们的值不会在迁移中受到影响。但是确定什么是 DISPLAY 字段也是一项艰巨的任务。有人可以提出一些想法或指出我可以进一步探索的方向吗?

任何帮助将不胜感激。我真的陷入了这里的泥潭。

谢谢, 阿迪亚。

【问题讨论】:

  • 你说COMP-3数据不用转换???您是否只对检测和转换DISPLAY 类型数据(例如可打印字符)感兴趣,而忽略打包和二进制数据?您能否概述一下这种转换的目的是什么?它可能会帮助我们制定转换策略。但我担心如果没有 COBOL 记录布局可以使用,您可能注定要失败。

标签: migration cobol


【解决方案1】:

有许多企业转型工具可以完全满足您的需求。或者,很容易从编译的字帖中解析 A​​DATA 记录,以获取每个字段的确切字节位置和表示。

我可以大胆猜测一下吗?你没有人精通 Cobol 吗?处理 Cobol 字帖并不难,当然也没有使用像 Perl 这样的只写语言那么难。

您有可用的同步排序或 DFsort 吗?它会用一个简单的配置文件来完成你所要求的......

【讨论】:

  • 乔,谢谢。您是对的,我们的团队中没有 Cobol 专家。我们已经有了一个工具,可以按照您说的做,从源代码生成记录布局。问题是,我们现在没有源代码,也不允许使用其他工具。我们所能做的就是读取一个数据文件。 NealB,我们需要将 EBCDIC 数据文件转换为 ASCII 文件。除此之外,我们还需要生成文件的记录布局,这是次要要求。现在,为了转换的目的,我们不需要触摸除 DISPLAY 字段以外的任何内容。惠
【解决方案2】:

我猜你必须使用概率,并希望数据变化得足以从中得到很多。

  • 任何仅包含字母数字加标点符号的 EBCDIC 值的字段
  • 数字显示字段将是最简单的,仅包含 EBCDIC 0-9。请注意,如果已签名,则第一个数字将更改为字母,例如我认为 A 是 -1。
  • 非常随机分布的值(以十六进制 0 开头)可能是二进制数字“COMP”字段。
  • COMP-3 字段是数据的每个十六进制数字中的一个十进制数字。因此,如果所有十六进制数字恰好是 0-9,那是 comp-3 字段的一个强符号。除了该字段的最后一个十六进制数字,它将包含一个 C 表示正数,D 表示负数,F 表示无符号数。
  • 有些程序在数字字段中使用空格,因此如果字段包含各种二进制和十六进制 40(空格),最好将十六进制 40 排除在外。它可能会告诉您一组字节是一个字段,如果它们都是空格或所有数据在一起。

对于多个布局,这很难。可以具有多个布局的记录的一个常见约定是在记录的前面附近有一组有限的值来表示“这是什么类型的数据”。比如significantID、recordType、data。所以重要ID应该稳定增加,而recordType字段将在几个值之间变化并重新循环。

【讨论】:

  • 最后一段有意义,其余的都是可疑的。
【解决方案3】:

RecordEditor / JRecord 中的 FileWizard 可以在文件中搜索 Mainframe Cobol 字段。 FileWizard 结果可以存储在 Xml 文件中以供其他语言使用,或者您可以使用复制功能从 Ebcdic 复制到 Ascii 固定或 CSV 格式。

File Wizard 上有一些过时的文档

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2016-10-15
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多