Возможно ли преобразовать файл EBCDIC Comp-3 в значения файла ASCII с помощью java?

Я пытаюсь преобразовать поля EBCDIC COMP-3 в значения ASCII, но это не работает. Но двоичные поля COMP-3 можно преобразовать в значения ASCII. Пожалуйста, помогите мне понять, возможно ли это или нет? Для меня подходит даже использование любой другой библиотеки java. Я пробовал и искал, но конкретного ответа не нашел.

Обновление:

В моем предыдущем бинарном файле должен быть тот, который будет работать. Это то, что я получил в качестве ответа, но не было ясности относительно EBCDIC COMP-3.

КОПИЯ:

001700 01 EMP-RECORD.                                                           
001900        10  EMP-NO                     PIC 9(10).                         
002000        10  EMP-NAME                   PIC X(30).                         
002100        10  EMP-ADDRESS                PIC X(30).                         
002200        10  EMP-SALARY                 PIC S9(8)V9(2) COMP-3.             
002200        10  EMP-ZIPCODE                PIC 9(4).                          

Двоичный файл COMP-3: можно преобразовать

  ËÍ>ÁÁ% ,Í_/Ê Ê                Â/>Å/%?ÊÁ                        Á~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¢|ëá&ç                        ïçñèá ãñá<à                     ÊÊ>     

EBCDIC COMP-3: преобразование невозможно

0000001001suneel kumar r                city                       e¡5671   

Программа:

public static void main(String args[]) throws Exception {
    String salesFile = "empcompnewbinary.txt";
    String copybookName = "EMPCOPYBOOK.txt";
    AbstractLine saleRecord;

    int fileStructure = Constants.IO_FIXED_LENGTH;
    CobolIoProvider ioProvider = CobolIoProvider.getInstance();
    AbstractLineReader reader = ioProvider.getLineReader(fileStructure, Convert.FMT_MAINFRAME,
            CopybookLoader.SPLIT_NONE, copybookName, salesFile);

    while ((saleRecord = reader.read()) != null) {
        System.out.print(saleRecord.getFieldValue("EMP-NO").asString() + "-"
                + saleRecord.getFieldValue("EMP-NAME").asString() + "-"
                + saleRecord.getFieldValue("EMP-ADDRESS").asString() + "-"
                + saleRecord.getFieldValue("EMP-SALARY").asDouble() + "-"
                + saleRecord.getFieldValue("EMP-ZIPCODE").asString());
    }
    reader.close();
}

person sunleo    schedule 20.09.2017    source источник
comment
Возможный дубликат Как распаковать цифры COMP-3 с помощью Java?   -  person SaggingRufus    schedule 20.09.2017
comment
Я считаю, что jt400.jar (для AS / 400, также известный как i) содержит вспомогательные методы, которые могут оказаться полезными.   -  person Thorbjørn Ravn Andersen    schedule 20.09.2017
comment
Вы можете предоставить необработанные файлы ???; возможно, загрузите их на sourceforge.net/projects/jrecord   -  person Bruce Martin    schedule 21.09.2017
comment
Этот ответ об использовании генератора кода в RecordEditor может помочь: stackoverflow.com/questions/46313332/   -  person Bruce Martin    schedule 21.09.2017
comment
@BruceMartin в этом ответе вы упомянули как передать двоичный файл с мэйнфрейма. Но у меня нет двоичного файла. У меня есть файл EBCDIC.   -  person sunleo    schedule 21.09.2017
comment
Двоичный мэйнфрейм будет файлом ebcdic. Я обновлю вопрос   -  person Bruce Martin    schedule 21.09.2017


Ответы (1)


Не существует такой вещи, как «поле EBCDIC COMP-3», и ему нет эквивалента в кодовых точках ASCII. Это двоичный формат. Итак, поймите, что у вас есть запись, состоящая из символьных и двоичных форматов.

Comp-3 упакован в десятичном формате. Он может немного отличаться на разных архитектурах машин относительно того, где они помещают полубайт знака и еще много чего, но это двоичный формат, поэтому любая попытка преобразовать его с использованием правил набора символов всегда будет неудачной.

Самый простой способ справиться с этим - преобразовать любые упакованные десятичные данные в формат отображения, состоящий из символов. Поэтому вместо x'0123456C 'вы фактически конвертируете это в c'01234.56', и тогда ваше стандартное преобразование EBCDIC в ASCII будет работать нормально.

person Joe Zitzelberger    schedule 29.09.2017
comment
Спасибо, что было полезно. - person sunleo; 06.11.2017