从 IBM i 系列 (AS400) 到 Java 文本文件的分离字符生成

问题描述 投票:0回答:1

我正在尝试创建一个“XLS”文件,但它将以 txt 文件的形式提供。 (这意味着当您右键单击并选择在窗口中打开并选择记事本时,它将显示为制表符分隔的文本文件。)

这是我要创建的示例文件(我必须删除一些条目,因为它很大)。当你用notepad++打开文件,选择编码为UTF-8时,你会看到如下图的“隐藏字符”:

如果你能看到 xA0,它是由 IBM I 系列 (AS400) 的 COBOL 程序生成的隐藏字符之一。

不过,如果你看到那些黄色高亮部分,那也是AS400的一个特点。声明如下:

DCL VAR(&FLDDLM)     TYPE(*CHAR) LEN(1)    VALUE(X'05')

现在我可以用下面这些测试代码生成 xA0:

List<Object[]> data = new ArrayList<>();
data.add(new Object[] { "AS1", "185914", "NETHERLANDS", "NL", "", "202023714", "2023714", "27-AUG-2022",
        "03-FEB-2023", "", "", "00000000", "IF-ADAMAS", "", "PTF166091NL00",
        "P166091NL00", "", "", "", "", "IF ADAMAS B V" });
data.add(new Object[] { "AS1", "20200893", "GERMANY", "DE", "", "13801864.3", "2915188",
        "05-NOV-2022", "22-FEB-2023", "R80049", "10", "00000434", "MICRONIT M", "",
        "PTF124241DEEP", "P118354DEEP", "", "", "", "",
        "MICRONIT MICROFLUIDICS B.V." });

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.XLS"),"windows-1252");

writer.write(
        "\"Client\"\t\"Case Number\"\t\"Country\"\t\"WIPO\"\t\"Subcase\"\t\"Application Number\"\t\"Patent Number\"\t\"Due Date\"\t\"Paid Date\"\t\"Invoice Number\"\t\"Annuity Number\"\t\"Invoice Amount\"\t\"Client/Division\"\t\"Client Ref(Inv)\"\t\"Client Ref#1(Ctry)\"\t\"Client Ref#2(Ctry)\"\t\"Attorney(Inv)\"\t\"Attorney(Ctry)\"\t\"Remarks\"\t\"Local Title\"\t\"Title Holder\"\n");

for (Object[] row : data) {
    for (int i = 0; i < row.length; i++) {
        writer.write("\"" + "\u00a0" + row[i].toString() + "\"");
        if (i < row.length - 1) {
            writer.write("\t");
        }
    }
    writer.write("\n");
}

writer.close();
System.out.println("Done");

}

我必须在

"windows-1252"
中输入
FileOutputStream("output.XLS"),"windows-1252");
以生成带有
xA0
"\u00a0"
,就像您在上图中看到的那样。然而,

DCL VAR(&FLDDLM) 类型(*字符) LEN(1) 值(X'05')

我在

里放了
"\u0005"
而不是简单的
"\t"

            if (i < row.length - 1) {
                writer.write("\t");
            }

它给了我

ENQ
喜欢下面的这张照片

那不是我想要达到的。我想像第一张图片那样实现。 因此,有人能告诉我什么是

X'05'
字段分隔符吗?我应该改变什么? 有人可以帮我吗?

我将不胜感激!

java websphere ibm-midrange cobol rpgle
1个回答
1
投票

您可能需要谷歌 ASCII 表和 EBCDIC 表。这样您就可以自己确定这些映射。但无论如何,您可以在 here 和 ASCII 表 here 中找到 EBCDIC 表。如果你寻找TAB或水平制表符,你会发现它在EBCDIC中是x05,在ASCII中是x09。由于 windows-1252 是 ASCII 码,您应该将 \u0009 加载到文件中。

© www.soinside.com 2019 - 2024. All rights reserved.