我有java程序在大型机z / OS上运行并正在读取EBCDIC文件。文件中很少有行具有由EBCDIC'LF'X'025'分隔的多个记录。我正在使用Java readline,正如预期的那样,它正在读取记录,直到换行并丢弃其余的记录。除了将大行解析为多个记录之外,有没有办法让读取方法将行拆分为多行/记录并返回相同的行?如果需要,我可以选择将新行分隔符更改为任何值。
输入:
10,IBM,ERWIN,BLACK,123,ABC(LF)10,IBM,JACK,ROSE,456
预期输出
10,IBM,ERWIN,BLACK,123,ABC
10,IBM,JACK,ROSE,456
当前代码:
public ArrayList<String> readMainframeFile()
{
//String DDNAME = ZFile.allocDummyDDName();
//System.out.println("The DDName is " + DDNAME);
//ZFile convout = new ZFile("//DD:CONVOUT", "wb,type=record,noseek");
//RecordReader reader=null;
try {
ZFile convin = new ZFile("//DD:CONVIN", "rb,type=record,noseek");
System.out.println("The DDName is" + convin.getLrecl());
byte[] recordBuf = new byte[convin.getLrecl()];
int bytesRead=0;
InputStream ins = null;
BufferedReader reader = null;
String temp=null;
ArrayList<String> lines = new ArrayList<String>();
while((bytesRead = convin.read(recordBuf)) > 0) {
//System.out.println("The number of bytes read is" + bytesRead);
try {
ins = new ByteArrayInputStream(recordBuf);
reader = new BufferedReader(new InputStreamReader(ins,Charset.forName("ibm500")));
temp=reader.readLine();
lines.add(temp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
return lines;
} catch (ZFileException e) {
System.err.println(e.getMessage());
return null;
}
}
答案 0 :(得分:0)
当您将QSAM二进制I / O打开为文本文件流时,您将打开该文件。
ZFile convin = new ZFile("//DD:CONVIN", "r");
然后就像通常使用流一样阅读记录。不需要额外的线路阅读器。 z / OS UNIX换行符通常是x&#39; 15&#39;所以你可能需要改变你的换行符。