gpt4 book ai didi

java - 使用 JRecord 读取大型机 comp-3 字段

转载 作者:行者123 更新时间:2023-12-02 12:14:28 30 4
gpt4 key购买 nike

我正在尝试读取大型机文件,但除 comp 3 文件之外的所有文件都在工作。下面的程序给出了奇怪的值。它无法读取双倍的工资值,也给出了 2020202020.20 值。我不知道缺少什么。请帮我找到它。

程序:

public final class Readcopybook {

private String dataFile = "EMPFILE.txt";
private String copybookName = "EMPCOPYBOOK.txt";

public Readcopybook() {
super();
AbstractLine line;

try {
ICobolIOBuilder iob = JRecordInterface1.COBOL.newIOBuilder(copybookName)
.setFileOrganization(Constants.IO_BINARY_IBM_4680).setSplitCopybook(CopybookLoader.SPLIT_NONE);

AbstractLineReader reader = iob.newReader(dataFile);
while ((line = reader.read()) != null) {
System.out.println(line.getFieldValue("EMP-NO").asString() + " "
+ line.getFieldValue("EMP-NAME").asString() + " "
+ line.getFieldValue("EMP-ADDRESS").asString() + " "
+ line.getFieldValue("EMP-SALARY").asString() + " "
+ line.getFieldValue("EMP-ZIPCODE").asString());
}

reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new Readcopybook();
}
}

EMPCOPYBOOK:

001700 01 EMP-RECORD.                                                           
001900 10 EMP-NO PIC 9(10).
002000 10 EMP-NAME PIC X(30).
002100 10 EMP-ADDRESS PIC X(30).
002200 10 EMP-SALARY PIC S9(8)V9(2) COMP-3.
002200 10 EMP-ZIPCODE PIC 9(4).

EMPFILE:

0000001001suneel kumar r                bangalore                       e¡5671                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
0000001002JOSEPH WHITE FIELD rrn4500

输出:

1001 suneel kumar r bangalore 20200165a10 5671
2020202020.20
2020202020.20
2020202020.20
2020202020.20
2020202020.20
2020202020.20
2020202020.20
2020202020.20

0.00
1002 JOSEPH WHITE FIELD 202072726e0 4500

最佳答案

一个问题是您已对文件进行 EbcdicAscii 转换。2020... 是一个死的赠品 x'20' 是 ascii 空格字符。 This Answer 处理 Ebcdicascii 转换的问题。

您需要从大型机进行二进制传输并使用 Ebcdic 读取文件。您将需要检查主机上的RECFM。如果RECFM是

  • FB - 问题只需转移
  • VB - 在大型机上转换为 FB,或者在传输中包含RDW(记录描述符字) 选项。
  • 其他 - 在主机上转换为FB/VB
<小时/>

更新了java代码

int fileOrg = Constants.IO_FIXED_LENGTH_RECORDS; // or Constants.IO_VB
ICobolIOBuilder iob = JRecordInterface1.COBOL
.newIOBuilder(copybookName)
.setFileOrganization(fileOrg)
.setFont("Cp037")
.setSplitCopybook(CopybookLoader.SPLIT_NONE);
<小时/>

注意: IO_BINARY_IBM_4680 适用于 IBM 4690 Registers

<小时/>

有一个 wiki 条目 here

或者这个问题

How do you generate java~jrecord code fror a Cobol copybook

关于java - 使用 JRecord 读取大型机 comp-3 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46293502/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com