是否可以使用 java 将 EBCDIC Comp-3 文件转换为 ASCII 文件值?
Is this possible to convert EBCDIC Comp-3 file to ASCII file values using java?
我正在尝试将 EBCDIC COMP-3 字段转换为 ASCII 值,但这不是 working.But 二进制 COMP-3 字段可以转换为 ASCII values.Please 帮助我理解这是否可能或不?即使使用任何其他 java 库也可以 me.I 尝试和搜索可能但我看不到具体答案。
更新:
In my previous one binary should be the one which will work.This what
I received as answer but there was no clarity about 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
程序:[=33=]
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();
}
没有 "EBCDIC COMP-3 field" 这样的东西,它在 ASCII 代码点中也没有等价物。它是一种二进制格式。所以请理解您有一个混合了字符和二进制格式的记录。
Comp-3 是压缩十进制。在不同的机器架构上,它们放置符号半字节等的位置可能会有所不同,但它是二进制格式,因此任何使用字符集规则转换它的尝试都会失败。
到目前为止,处理此问题的最简单方法是将任何压缩十进制数据转换为由字符组成的显示格式。因此,您实际上不是将 x'0123456C' 转换为 c'01234.56',然后您的标准 EBCDIC 到 ASCII 转换将正常工作。
我正在尝试将 EBCDIC COMP-3 字段转换为 ASCII 值,但这不是 working.But 二进制 COMP-3 字段可以转换为 ASCII values.Please 帮助我理解这是否可能或不?即使使用任何其他 java 库也可以 me.I 尝试和搜索可能但我看不到具体答案。
更新:
In my previous one binary should be the one which will work.This what I received as answer but there was no clarity about 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
程序:[=33=]
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();
}
没有 "EBCDIC COMP-3 field" 这样的东西,它在 ASCII 代码点中也没有等价物。它是一种二进制格式。所以请理解您有一个混合了字符和二进制格式的记录。
Comp-3 是压缩十进制。在不同的机器架构上,它们放置符号半字节等的位置可能会有所不同,但它是二进制格式,因此任何使用字符集规则转换它的尝试都会失败。
到目前为止,处理此问题的最简单方法是将任何压缩十进制数据转换为由字符组成的显示格式。因此,您实际上不是将 x'0123456C' 转换为 c'01234.56',然后您的标准 EBCDIC 到 ASCII 转换将正常工作。