Java 使用JRecord读取大型机comp-3字段
我正在尝试读取大型机文件,但除comp 3文件外,所有文件都正常工作。下面的程序给出了奇怪的值。它无法读取双倍的工资值,也给出了202020020.20值。我不知道我丢了什么。请帮我找到它 节目:Java 使用JRecord读取大型机comp-3字段,java,mainframe,copybook,jrecord,Java,Mainframe,Copybook,Jrecord,我正在尝试读取大型机文件,但除comp 3文件外,所有文件都正常工作。下面的程序给出了奇怪的值。它无法读取双倍的工资值,也给出了202020020.20值。我不知道我丢了什么。请帮我找到它 节目: public final class Readcopybook { private String dataFile = "EMPFILE.txt"; private String copybookName = "EMPCOPYBOOK.txt"; public Readco
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).
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
EMPFILE:
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).
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
输出:
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).
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
一个问题是您对该文件进行了Ebcdic到Ascii的转换。 2020年。。。是一个死送x'20'是ascii空格字符。 处理执行Ebcdic到ascii转换时出现的问题 您需要从大型机执行二进制传输,并使用Ebcdic读取文件。您将需要检查主机上的RECFM。如果RECFM是
- FB-问题刚刚转移
- VB-在主机上转换为FB,在传输中包括RDW(记录描述符字)选项
- 其他-在大型机上转换为FB/VB
更新的java代码
注意:IO_BINARY_IBM_4680适用于
有一个wiki条目 还是这个问题
你能给我一个JRecord的链接或其他东西吗?