jav*_*ean 2 java cobol date mainframe jrecord
我正在尝试使用JRecord读取COBOL数据文件,因为我有一个Header记录和Detail记录,因此我使用SPLIT_01_LEVEL和CopyBook文件格式解析为FMT_OPEN_COBOL.我在平面文件中有几个日期字段作为COMP-3字段,我无法理解如何将它们转换为Java日期字段.
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();
Run Code Online (Sandbox Code Playgroud)
CopyBook的字段为
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.
Run Code Online (Sandbox Code Playgroud)
当我按上面解析输出时
MPOH-ENTRY-DATE : 11261a1
MPOH-STATUS-DATE : 11261a1
MPOH-APPROVED-DATE : 11261a1
MPOH-ORDER-DATE : 11266140
Run Code Online (Sandbox Code Playgroud)
请帮我将这些字段转换为Java Date字段.
最大的问题是有一个EBCDIC到ascii转换.
JRecord构建器创建
ICobolIOBuilder iob = CobolIoProvider.getInstance()
.newIOBuilder(copybookName)
.setCopybookFileFormat(Convert.FMT_OPEN_COBOL)
.setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL);
Run Code Online (Sandbox Code Playgroud)
不包括setFont,因此在Unix/Linux/Windows PC上,这表示该文件是ASCII.如果你在Window/Linux/Unix上运行并且文件是在大型机上创建的,那么这是不好的,同样是数据真的来自GNUCobol ???.
数据看起来是通过EBCDIC - > Ascii转换??? 或者可能移动1个字节.如果它真的是GNU_Cobol你可能需要其他格式之一,例如FMT_OPEN_COBOL_MVS
以下所有4个数字都不是有效的comp-3数字:
MPOH-ENTRY-DATE : 11261a1
MPOH-STATUS-DATE : 11261a1
MPOH-APPROVED-DATE : 11261a1
MPOH-ORDER-DATE : 11266140
Run Code Online (Sandbox Code Playgroud)
MPOH-ORDER-DATE现在是x'11 26 61 40',而EBCDIC原件可能是x'11 50 81 7c'即
CYY = 115 (or 2015)
MM = 08
DD = 17
Run Code Online (Sandbox Code Playgroud)
所以你需要
将setFont("cp037")添加到IOBuilder步骤(如果您使用的是US ebcdic.不同国家/地区有不同的EBCDIC,例如德国的cp273).
ICobolIOBuilder iob = CobolIoProvider.getInstance()
.newIOBuilder(copybookName)
.setCopybookFileFormat(Convert.FMT_MAINFRAME)
.setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL)
.setFont("cp037");
Run Code Online (Sandbox Code Playgroud)值得一提的是,日期看起来是CYYMMDD格式,其中C = 0是1900而C = 1是2000
如果我不对,请提供原始数据和Copybook
另一种选择是字帖位移中的1字节错误
例如
MPOH-ENTRY-DATE : 1?11261
MPOH-STATUS-DATE : 1?11261
MPOH-APPROVED-DATE : 1?11261
MPOH-ORDER-DATE : 112661
Run Code Online (Sandbox Code Playgroud)
但它看起来不像日期???
Convert.FMT_MAINFRAME和Convert.FMT_OPEN_COBOL之间没有太大区别.但这些是差异:
以下字段是您可以看到差异的地方:
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |