【问题标题】:Mainframe comp-3 field reading using JRecord使用 JRecord 读取大型机 comp-3 字段
【发布时间】:2017-09-19 06:36:39
【问题描述】:

我正在尝试读取大型机文件,但除了 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

【问题讨论】:

    标签: java mainframe copybook jrecord


    【解决方案1】:

    一个问题是您对文件进行了 Ebcdic 到 Ascii 的转换。 2020... 是一个死礼物 x'20' 是 ascii 空格字符。 This Answer 处理将 Ebcdic 转换为 ascii 的问题。

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

    • FB - 问题只是转移
    • VB - 要么在大型机上转换为 FB,要么在传输中包含 RDW (Record Descriptor Word) 选项。
    • 其他 - 在大型机上转换为 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


    有一个维基条目here

    或者这个问题

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

    【讨论】:

    • 你能给我链接或来自 JRecord 的东西吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多