当前位置: 首页 > 知识库问答 >
问题:

如何从COBOL中的COMP-3字段中读取Java中的日期?

蓟和煦
2023-03-14
ICobolIOBuilder iob = CobolIoProvider.getInstance()
                 .newIOBuilder(copybookName)
                     .setCopybookFileFormat(Convert.FMT_OPEN_COBOL)
                     .setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL);
//I fetched fields as below
line.getFieldValue(field).asString();
MPOH-ENTRY-DATE              PIC S9(7) COMP-3.
MPOH-STATUS-DATE             PIC S9(7) COMP-3.
MPOH-APPROVED-DATE           PIC S9(7) COMP-3.
MPOH-ORDER-DATE              PIC S9(7) COMP-3.
MPOH-ENTRY-DATE : 11261a1
MPOH-STATUS-DATE : 11261a1
MPOH-APPROVED-DATE : 11261a1
MPOH-ORDER-DATE : 11266140

请帮助我在转换这些字段到Java日期字段。

共有1个答案

谷梁迪
2023-03-14

最大的问题是有一个EBCDIC到ascii的转换。

JRecord builder创建

ICobolIOBuilder iob = CobolIoProvider.getInstance()
             .newIOBuilder(copybookName)
                 .html" target="_blank">setCopybookFileFormat(Convert.FMT_OPEN_COBOL)
                 .setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL);

不包括setFont,因此在Unix/Linux/Windows PC上,这表明文件是ASCII。如果您在Windows/Linux/Unix上运行,并且文件是在大型机上创建的,这就不好了,而且数据真的是从GNUCobol中输入的吗???。

MPOH-ENTRY-DATE : 11261a1
MPOH-STATUS-DATE : 11261a1
MPOH-APPROVED-DATE : 11261a1
MPOH-ORDER-DATE : 11266140

MPOH订单日期现在是X'11266140',而EBCDIC最初可能是X'1150817C'即。

CYY = 115 (or 2015)
 MM =  08 
 DD =  17

所以你需要

>

  • 获取原始EBCDIC文件的二进制传输。如果它是大型机上的recfm=vb文件,请首先将其转换为recfm=fb。
  • 将setFont(“cp037”)添加到IOBuilder步骤中(如果您使用的是美国的EBCDIC。不同国家的EBCDIC不同,例如德国的cp273)。

    ICobolIOBuilder iob = CobolIoProvider.getInstance()
             .newIOBuilder(copybookName)
                 .setCopybookFileFormat(Convert.FMT_MAINFRAME)
                 .setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL)
                 .setFont("cp037");
    

    另一种选择是抄写本位移中的1字节错误

    例如。

    MPOH-ENTRY-DATE : 1?11261
    MPOH-STATUS-DATE : 1?11261
    MPOH-APPROVED-DATE : 1?11261
    MPOH-ORDER-DATE : 112661
    

    但这看起来不像约会???

      null
    03 f1              pic s9(3).
    03 f2              pic s99 comp.
    03 f3              pic s9(4) comp-5  
    03 f4     comp-1.
    03 f5     comp-2.
    

  •  类似资料:
    • 问题内容: 我在第3方中设计的课程很差,我需要访问它的一个私有字段。例如,为什么我需要选择私有字段? 如何使用反射获取值? 问题答案: 为了访问私有字段,你需要从类的声明字段中获取它们,然后使其可访问: 编辑:正如所说,访问字段,将字段设置为可访问并检索值都可能引发,尽管上面需要注释的唯一检查异常。 在NoSuchFieldException如果你问一个字段由不符合声明的字段的名称将被抛出。 该会

    • 我刚来Java,如果这是个明显的问题,我很抱歉。 我正在尝试逐个字符读取字符串以创建树节点。例如,输入,节点为 我注意到了 我可以用一个循环来获得所有的角色吗?就像 我试过了,但不管用。 我该怎么做? 非常感谢你的帮助。 扫描器读取器=新扫描器(System.in);System.out.println(“将节点输入为大写字母,不带空格,结尾为'/'”);int i=0;char node=rea

    • 问题内容: 我有一个具有String字段的对象。我可以通过致电获得该字段: 我设置了一个方法来设置此实例的字段的值,但是各个getter似乎是,这很奇怪,因为我希望它是。 如何获取实例的值? 问题答案: 如果使用,则“ setter”为,“ getter”为。在 这两种 情况下,第一个参数都是您要在其上访问字段的实例。

    • 问题内容: 我想读取一个文件,该文件位于类路径中所包含的 之一内。我如何读取其中包含的任何文件? 问题答案: 如果要从应用程序内部读取该文件,请使用: 路径以“ /”开头,但这不是文件系统中的路径,而是类路径中的路径。因此,如果你的文件位于类路径“ org.xml”中,并且名为myxml.xml,则路径类似于“ /org/xml/myxml.xml”。 InputStream读取文件的内容。如果需

    • 下面是演示类 我有一个演示实例: 对于新的,我需要从Demo了解字段,因为我需要一种通用的方法来获得任何具有基本字段/简单字段的类的对象数组

    • 问题内容: 我在Python 2.6.4中使用sqlite3模块将日期时间存储在SQLite数据库中。插入它非常容易,因为sqlite自动将日期转换为字符串。问题是,读取时它以字符串形式返回,但是我需要重建原始的datetime对象。我该怎么做呢? 问题答案: 如果用时间戳记类型声明列,那么您将处于三叶草中: 看到?int(对于声明为整数的列而言)和datetime(对于声明为timestamp的