大型机Comp-3字段使用JRECORD



我正在尝试读取大型机文件,但是除了Comp 3 File.below Program提供了奇怪的值。给出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

一个问题是您已经完成了 ebcdic to ascii 在文件上转换。2020 ...是ASCII空间特征的死者X'20'。此答案涉及做 EBCDIC to ascii 转换的问题。

您需要进行二进制从大型机转移,然后使用EBCDIC读取文件。您将需要在大型机上检查 RECFM 。如果RECFM为

  • fb - 问题只需转移
  • vb - 要么在传输中的 rdw的大型机上转换为fb。
  • 其他 - 大型机上的FB/VB转换为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寄存器


这里有一个Wiki条目

或这个问题

您如何生成java〜jrecord代码foror a cobol copybook

相关内容

  • 没有找到相关文章

最新更新