首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于JRecord的大型机comp-3现场读取

基于JRecord的大型机comp-3现场读取
EN

Stack Overflow用户
提问于 2017-09-19 06:36:39
回答 1查看 1.2K关注 0票数 0

我试着读取主机文件,但是除了comp 3之外,所有的file.Below程序都给出了奇怪的values.It无法读取双倍的工资值,也就是给出了2020202020.20的值。我不知道missing.Please是什么,帮我找到它。

程序:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
0000001001suneel kumar r                bangalore                       e¡5671                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
0000001002JOSEPH                        WHITE FIELD                     rrn4500

输出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-09-19 08:30:29

一个问题是,您已经对文件执行了EbcdicAscii的转换。2020年..。是死的给出x'20‘是ascii空间字符。这个答案处理执行Ebcdicascii转换的问题。

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

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

更新的java代码

代码语言:javascript
复制
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条目这里

或者这个问题

如何从Cobol文案中生成java~jrecord代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46293502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档