【发布时间】:2016-07-30 09:07:32
【问题描述】:
我正在尝试使用 JRecord 库在 Eclipse RCP 应用程序中显示大型机文件。我已经将 COBOL 副本作为文本文件。 为了做到这一点,
- 我正在通过以下方式将文件从大型机传输到我的桌面 apache commons net FTPClient API
- 现在我有一个文本文件
- 我正在删除换行符和回车符
- 然后我通过 CobolIoProvider 读取它并将其转换为 AbstractLine 类型的 ArrayList
但由于一些特殊字符,我有抵消问题。 这是问题
- 当我不执行第 3 步时,会出现偏移问题 记录 1. 因此我包括了第 3 步
- 即使我执行第 3 步,前几千条记录似乎也被 AbstractLineReader 正确格式化(或读取),除非它遇到特殊字符(不确定,但这是我的假设)。
代码sn-p:
ArrayList<AbstractLine> lines = new ArrayList<AbstractLine>();
InputStream copyStream;
InputStream fis;
try {
copyStream = new FileInputStream(new File(copybookfile));
String filec = FileUtils.readFileToString(new File(datafile));
System.out.println("initial len: "+filec.length());
filec=filec.replaceAll("\r", "");
filec=filec.replaceAll("\n", "");
System.out.println("initial len: "+filec.length());
fis= new ByteArrayInputStream(filec.getBytes());
CobolIoProvider ioProvider = CobolIoProvider.getInstance();
AbstractLineReader reader = ioProvider.newIOBuilder(copyStream, "REQUEST",
Convert.FMT_MAINFRAME).newReader(fis);
AbstractLine line;
while ((line = reader.read()) != null) {
lines.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我在这里缺少什么?我需要对从大型机传输的文件进行额外的预处理吗?
【问题讨论】:
-
如果你有一个文本文件,你所说的“特殊字符”是什么?能否包含 COBOL 记录布局和导致问题的数据样本?
-
布局和数据是专有的,因此我将尝试解释到目前为止我发现的内容。我能够找出导致问题的字段。在 Mainframe 中,该字段定义为 X(24),用于存储 MQ 消息 id。该字段是大多数记录的空格。但是在不是空格的记录中,就是格式出错的时候。因此,虽然步骤 3(在我的问题中解释)是使记录连续所必需的,但这也会导致这种副作用。
-
我怀疑的“副作用”是这个 MQ 消息 id 字段具有
\r或\n并且由于我的第 3 步而被替换 -
这也引出了另一个问题。当我使用 apache commons
FTPClient从大型机传输文件时,是否可以选择不带字符“\n”和“\r” -
如果您所指的专有布局是 MQMD,那就是 documented by IBM。请注意消息 ID 字段内容的文档。
标签: ftp eclipse-rcp cobol apache-commons-net jrecord