java - 分离字符生成从 IBM i 系列 (AS400) 转换为 Java 文本文件

标签 java ibm-midrange cobol rpgle

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

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

如果您可以看到 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) 类型(*CHAR) LEN(1) 值(X'05')

我在

中放入了“\u0005”而不是简单的“\t”
            if (i < row.length - 1) {
                writer.write("\t");
            }

它给了我ENQ,如下图所示

enter image description here

这不是我想要达到的目标。我想要实现像第一张图一样的效果。 因此,有人可以告诉我 X'05' 字段分隔符的等效项是什么吗?我应该改变什么? 有人可以帮我解决这个问题吗?

我将不胜感激!

最佳答案

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

关于java - 分离字符生成从 IBM i 系列 (AS400) 转换为 Java 文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75899630/

相关文章:

history - COBOL 历史中未提及的部分

java - 无法在 Windows 7 上安装 Microfocus Visual Cobol 个人版

java - 突出显示 ListView 选择

java - 平均二维数组列

java - 将 <Object, AtomicInteger> 映射到关联数组

SQL 用户定义的 Java 函数(CCSID 65535 和 CCSID 1200 之间的字符转换无效)

parsing - 确定 Cobol 编码风格

java:54: 错误:需要类、接口(interface)或枚举,但构建失败并出现异常

java - 使用 JTOpen 的 RPG (iSeries) 现代化 - 什么是可能的?

ibm-midrange - AS400 物理文件记录上次更新时间戳