JRecord - 处理cobol copybook中的重复列

时间:2015-01-10 03:41:02

标签: cobol jrecord

我在git https://github.com/tmalaska/CopybookInputFormat/上使用 CopybookInputFormat 来从COBOL copybook生成hive表定义。我的字帖有很多填料(重复列) 但看起来JRecord没有正确处理重复的列名。 对于下面的字帖,当我迭代列时,JRecord只打印第二个填充并忽略第一个填充。

  05 Birth-day              PIC X(002)
  05 Filler                 PIC X(008)
  05 Birth-Month            PIC X(002)
  05 Filler                 PIC X(008)
  05 Birth-year             PIC X(004)

有没有人对此有任何解决方案?我知道 JRecord 0.80.6 以后正在处理重复的列,但方法getUniqueField("FIRST-NAME", "PRESIDENT")需要一个组名..但是如果组有重复的列呢?

1 个答案:

答案 0 :(得分:3)

您不需要导入填充程序。在Cobol中,无法直接访问填充程序。在Cobol中,填充程序忽略字段(或通过其他方法访问它)。

Cobol-Copybook就像是一块内存的掩码;填充符用于跳过一些内存。

  Data         !##........##........##   (# - accessible bytes; . - inaccessible bytes)
                ^         ^         ^                               
                !         !         !
Birth-day    ---+         !         ! 
Filler                    !         ! 
Birth-Month  -------------+         !  
Filler                              !
Birth-year   -----------------------+   

填料可用于:

  • 屏蔽不再使用的字段。
  • 重新定义中使用的掩码数据
  • 当您不需要所有字段时创建简历版本的副本
  • 初始化输出字段,即
     05 report-Birth-date
        10 dd          pic 99.
        10 filler      pic '/'.
        10 mm          pic 99.  
        10 filler      pic '/'.
        10 yyyy        pic 9999.
  • 设置表格数据
     05 codes.
        10 code occurs 5  pic 99.
     05 filler redefines codes pic x(10)
        value '0204050612'.

我会问 Cobol专家工作 发生了什么 ???可能的答案可能是:

  • 可能不需要填充数据。
  • 您应该使用其他更复杂的Copybook。
  • 应使用真实姓名的填充程序更新字帖。