Чтение упакованного десятичного числа и преобразование в числовое в весенней загрузке

Все,

Я использую загрузочное приложение 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 в читаемый формат. Пожалуйста помоги!

0 ответов

Другие вопросы по тегам