Чтение файлов переменных EBCDIC с помощью comp-3 без COBOL на MVS?

#java #.net #cobol #ebcdic #mvs

#java #.net #cobol #ebcdic #mvs

Вопрос:

Есть ли способ с Java или внутри.Net или какой-то API для чтения файлов EBCDIC, которые являются переменными, и распаковки данных COMPUTANIONAL-3?

Я искал, и все, что я смог найти, это то, что UltraEdit преобразует EBCDIC в ANSI, но файл по-прежнему недоступен из-за переменной длины и COMP-3.

Комментарии:

1. Вы ничего не можете преобразовать в ANSI, поскольку ANSI — это организация.

2. github.com/cschneid-the-elder/rants/blob/master/…

3. @Дэвид Конрад — Действительно существует набор кодовых страниц, называемых ANSI something . Взгляните на docs.microsoft.com/en-us/windows/win32/intl /… и переходим к кодовым страницам, начинающимся с CP-1250

4. @phunsoft Существует множество кодировок, стандартизированных ANSI, который является организацией, и они могут называться «ANSI something», но они не называются «ANSI», что является названием организации, и, как вы сами использовали, они правильно называются CP-1250 или Windows-1252 и т.д.

Ответ №1:

В z / OS, откуда берутся ваши данные, есть пакет Java под названием Java Batch Toolkit для z / OS (JZOS), который предлагает множество классов для работы с наборами данных и записями мэйнфреймов (мэйнфреймы говорят о файле). Google «IBM JZOS».

Поскольку вы упомянули .net, я предполагаю, что вы ссылаетесь на код, работающий на ПК (Windows), и JZOS не подходит.

Если файлы загружаются с помощью FTP, использование bin и quote mode b на стороне клиента будет передавать записи, добавляя 3-байтовый заголовок к каждой записи (см. RFC 959: FTP, глава 3 «Функции передачи данных», раздел «3.4.2. Режим блокировки»).

Заголовок позволяет коду понять, является ли это последней записью или нет, и, что более важно, длина каждой записи. Обратите внимание, что двухбайтовое двоичное поле длины находится в формате big endian.

Вам нужно будет понять структуру записи, то есть из каких полей состоит запись. И формат каждого поля, то есть символьного поля EBCDIC, упакованного десятичного поля (ВЫЧИСЛИТЕЛЬНОГО-3) и т.д.

Далее вам нужно знать кодовую страницу EBCDIC, используемую на мэйнфрейме. Затем вы можете использовать iconv() (или соответствующие методы Java), чтобы преобразовать их в любую нужную вам кодовую страницу.

Что касается упакованных десятичных полей, вам также необходимо знать точность, т.Е. Сколько цифр предполагается десятичными дробными цифрами.