我有一个包含一些COMP-3编码字段的文件。谁能告诉我如何在下面的线程中测试这段代码?
How to unpack COMP-3 digits using Java?
我试过的代码是
BufferedReader br =新BufferedReader(新文件名(FileReader){
String sCurrentLine;
int i=0;
String bf =null;
while ((sCurrentLine = br.readLine()) != null) {
i++;
System.out.println("FROM BYTES ");
System.out.println(unpackData(sCurrentLine.getBytes(), 5));
for (int j = 0; j < sCurrentLine.length(); j++) {
char c = sCurrentLine.charAt(j);
bf =bf + (int)c;
}上面的代码没有给出正确的结果。我尝试了单列转换,但没有返回正确的结果。我的输入列

输入文件看起来像这样

我尝试了JRecord,通过cbl的副本和数据文件,它生成的Java代码是不同的结果生成的输出

所需输出

cbl复印本如下图所示

发布于 2017-08-08 20:56:51
如果使用基于Ascii的Cobol,则接受的答案可能会 in How to unpack COMP-3 digits using Java? work。当使用FileReader读取大型机Ebcdic文件时,它将不起作用。
您已将问题标记为Mainframe - Ebcdic。
为了正确处理,
COMP-3 data unpacking in Java (Embedded in Pentaho)中的答案将会起作用;关于stackoverflow的其他答案也会起作用。
尝试将Comp-3数据作为字符处理容易出错
JRecord
如果你有一个Cobol拷贝本,JRecord library将允许你使用Cobol拷贝本来阅读文件。它包含一个经过基础知识的文档ReadMe_NewUsers.html。
RecordEditor
RecordEditor的Generate >>> Java~JRecord code for cobol菜单选项将从Cobol copybook (以及可选的数据文件)生成Java~JRecord。

在这个答案How do I identify the level of a field in copybook using JRecord in Java?或查看here中有关于生成代码的详细信息
另外,在RecordEditor中,Record Layout >>> Load Cobol Copybook将加载Cobol copybook;然后您可以使用Layout查看该文件。
发布于 2017-08-10 14:43:25
处理压缩小数的最好方法是使用IBM Data Access Accelerator API。它使用名为packed objects的IBM优化,这是一种用于有效处理本机数据的技术。有一些很好的Java代码可用于处理打包的十进制数据,但数据访问加速器是明智的选择。它把凉码吹走了。
发布于 2017-08-11 19:53:54
如果您将copybook与data进行比较,则会发现它不匹配。
特别地,Class-Order-edg被定义为pic 9(3),但在文件中它看起来像是二进制。
Bils-count-edg看起来被移位了6个字节。这与字段Class-order-edg --> Country-no-edg更改为comp-3/comp一致。抄写本似乎已经过时了。
https://stackoverflow.com/questions/45567511
复制相似问题