Чтение упакованного десятичного числа и преобразование в числовое в весенней загрузке
Все,
Я использую загрузочное приложение Spring для хранения данных в БД. Я получаю эти данные из IBM MQ через тему Kafka. Я получаю сообщения в формате EBCDIC, поэтому использовал cobol copybook, JRecord, банки cb2xml для преобразования в читаемый формат и хранения в БД.
Теперь я получаю другой файл таким же образом, но после преобразования данные выглядят так:
10020REFUNDONE
10021REFUNDTWO ·" ÷/
10022REFUNDTHREE oú^ "
10023REFUNDFOUR ¨jÄ ò≈
Вот как я конвертирую в читаемый формат из ebcdic:
AbstractLineReader reader = null;
StringBuffer finalBuffer = new StringBuffer();
try {
String copybook = "/ds_header.cbl";
reader = CustomCobolProvider.getInstance().getLineReader(copybook, Convert.FMT_MAINFRAME, new BufferedInputStream(new ByteArrayInputStream(salesData)));
AbstractLine line;
while ((line = reader.read()) != null) {
if (null != line.getFieldValue(REC_TYPE)){
finalBuffer.append(line.getFullLine());
}
}
}
и это мой метод getLineReader:
public AbstractLineReader getLineReader(String copybook, int numericType, InputStream fileStream) throws Exception {
String font = "";
if (numericType == 1) {
font = "cp037";
}
InputStream stream = CustomCobolProvider.class.getResourceAsStream(copybook);
if(stream == null ) throw new RuntimeException("Can't Load the Copybook Metadata file from Resource....");
LayoutDetail copyBook = ((ExternalRecord)this.copybookInt.loadCopyBook(stream, copybook, CopybookLoader.SPLIT_REDEFINE, 0, font, CommonBits.getDefaultCobolTextFormat(), Convert.FMT_MAINFRAME, 0, (AbsSSLogger)null).setFileStructure(Constants.IO_FIXED_LENGTH)).asLayoutDetail();
AbstractLineReader ret = LineIOProvider.getInstance().getLineReader(copyBook, (LineProvider)null);
ret.open(fileStream, copyBook);
return ret;
}
Я застрял здесь с числовым преобразованием, я узнал, что оно идет в упакованном десятичном виде. У меня нет знаний о коболе и мейнфрейме, я просмотрел несколько сайтов и узнал, как конвертировать из ebcdic в читаемый формат. Пожалуйста помоги!