我有一个带有一些COMP-3编码字段的文件。有人可以告诉我如何在下面的帖子中测试这段代码吗?
How to unpack COMP-3 digits using Java?
我试过的代码是
BufferedReader br = new BufferedReader(new FileReader(FILENAME))){
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 copybook和数据文件,它生成的Java Code给出了不一样的结果 生成输出
必需的输出
cbl copy book看起来像下面的图像
答案 0 :(得分:0)
如果使用基于 Cobol 的 Ascii ,How to unpack COMP-3 digits using Java?中已接受的答案可能。使用FileReader读取 Mainframe Ebcdic 文件时,它将无法使用。
您已将问题标记为大型机 - Ebcdic 。
要正确处理,
COMP-3 data unpacking in Java (Embedded in Pentaho)中的答案将有效; stackoverflow上还有其他答案也可以使用。
尝试处理Comp-3数据时,角色容易出错
如果您有Cobol副本,JRecord library将允许您使用Cobol副本阅读该文件。它包含一个文档ReadMe_NewUsers.html,它涵盖了基础知识。
生成&gt;&gt;&gt; RecordEditor的cobol 菜单选项的Java~JRecord代码将从Cobol副本(以及可选的数据文件)生成Java~JRecord。
有关在此回答How do I identify the level of a field in copybook using JRecord in Java?中生成代码或查看here
的详细信息同样在RecordEditor 记录布局&gt;&gt;&gt;加载Cobol Copybook 将加载Cobol副本;然后,您可以使用Layout
查看文件。
答案 1 :(得分:0)
操纵压缩十进制的最佳方法是使用IBM Data Access Accelerator API。它使用名为packed objects的IBM特定JVM优化,这是一种有效处理本机数据的技术。 SO上有一些很好的Java代码用于处理压缩十进制数据,但数据访问加速器是明智的选择。它吹掉了RYO代码。
答案 2 :(得分:0)
如果比较副本与数据;你会发现它不匹配。
特别是 Class-Order-edg 定义为pic 9(3),但它看起来像文件中的二进制。
Bils-count-edg看起来要移6个字节。 这与字段Class-order-edg - &gt;一致。 Country-no-edg被改为comp-3 / comp。该字帖似乎已过时。