У меня есть программа 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;
}
}
Каковы основные критерии разделения линии? Я угадываю его '(LF)' – Smit
Вы должны зациклиться на 'readLine()' до тех пор, пока он не вернет null. Вы также игнорируете 'bytesRead' при построении' ByteArrayInputStream''. – EJP