是否可以使用java将EBCDIC Comp-3文件转换为ASCII文件值?

时间:2017-09-20 15:43:57

标签: java cobol mainframe jrecord

我正在尝试将EBCDIC COMP-3字段转换为ASCII值但不起作用。但是二进制COMP-3字段可以转换为ASCII值。请帮助我理解这是否可能?即使使用任何其他java库也没问题。我尝试过但可能找不到具体的答案。

更新

  

在我之前的一个二进制文件应该是可以工作的二进制文件。这是什么   我收到了答案,但没有关于EBCDIC COMP-3的清晰度。

字帖:

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).                          

BINARY COMP-3文件:可以转换

  ËÍ>ÁÁ% ,Í_/Ê Ê                Â/>Å/%?ÊÁ                        Á~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¢|ëá&ç                        ïçñèá ãñá<à                     ÊÊ>     

EBCDIC COMP-3:无法转换

0000001001suneel kumar r                city                       e¡5671   

程序:

public static void main(String args[]) throws Exception {
    String salesFile = "empcompnewbinary.txt";
    String copybookName = "EMPCOPYBOOK.txt";
    AbstractLine saleRecord;

    int fileStructure = Constants.IO_FIXED_LENGTH;
    CobolIoProvider ioProvider = CobolIoProvider.getInstance();
    AbstractLineReader reader = ioProvider.getLineReader(fileStructure, Convert.FMT_MAINFRAME,
            CopybookLoader.SPLIT_NONE, copybookName, salesFile);

    while ((saleRecord = reader.read()) != null) {
        System.out.print(saleRecord.getFieldValue("EMP-NO").asString() + "-"
                + saleRecord.getFieldValue("EMP-NAME").asString() + "-"
                + saleRecord.getFieldValue("EMP-ADDRESS").asString() + "-"
                + saleRecord.getFieldValue("EMP-SALARY").asDouble() + "-"
                + saleRecord.getFieldValue("EMP-ZIPCODE").asString());
    }
    reader.close();
}

1 个答案:

答案 0 :(得分:2)

没有“EBCDIC COMP-3字段”这样的东西,它在ASCII码点中没有等价物。它是二进制格式。所以要理解你有一个混合了字符和二进制格式的记录。

Comp-3是十进制的。它可以在不同的机器架构上有所不同,关于它们放置符号半字节和诸如此类的位置,但它是二进制格式,因此任何使用字符集规则转换它的尝试都将失败。

到目前为止,处理此问题的最简单方法是将任何压缩十进制数据转换为由字符组成的显示格式。因此,实际上将其转换为c'01234.56'而不是x'0123456C',然后您的标准EBCDIC到ASCII转换将正常工作。