为EBCDIC数据文件生成记录布局。

时间:2011-09-08 17:20:39

标签: migration cobol

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

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

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

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

任何帮助都将受到高度赞赏。我真的陷入了泥潭。

谢谢, 阿迪亚。

3 个答案:

答案 0 :(得分:1)

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

我可以冒险猜测吗?你有没有熟练的Cobol?处理Cobol副本并不难,当然也不像使用像Perl这样的只写语言那么难。

您是否有同步或DFsort可用?它会用简单的配置文件做你要求的......

答案 1 :(得分:1)

我想你必须考虑概率,并希望数据的变化足以从中获得很多。

  • 任何仅包含字母数字加上标点符号的EBCDIC值的字段
  • 数字DISPLAY字段将是最简单的,仅包含EBCDIC 0-9。请注意,如果签名,则第一个数字将更改为字母,如A,我认为是-1。
  • 以十六进制0表示的相当随机的值分布可能是二进制数字“COMP”字段。
  • COMP-3字段是数据的每个十六进制数字中的一个十进制数字。因此,如果所有十六进制数字恰好是0-9,那么这是comp-3字段的强烈信号。除了字段的最后一个十六进制数字,其中包含C表示正数,D表示负数,F表示无符号。
  • 某些程序在数字字段上使用空格,因此如果某个字段包含各种二进制文件,并且还包含十六进制40(空格),则最好将十六进制40折腾出混合。它可能会告诉你一组字节是一个字段,如果它们都是空格,或者所有数据在一起。

对于多种布局,这很难。可以具有多个布局的记录的常见约定是在记录的前面附近具有“有限数据类型”的有限值集。像significantID,recordType,data一样。因此,significantID应该稳定增加,而recordType字段将在几个值之间变化并重新循环。

答案 2 :(得分:0)

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

File Wizard

上有一些过时的文档