Создание макетов записей для файлов данных EBCDIC. - PullRequest
0 голосов
/ 08 сентября 2011

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

Предполагается, что каждый файл данных, написанный программой Cobol, исходный код которой у нас отсутствует, может иметь несколько макетов записей.Цель этого инструмента - выполнить миграцию данных (EBCDIC в ASCII), создав макет, который затем будет передан в конвертер.

Проблема в том, что с каждым байтом могут возникнуть сотни перестановок и комбинаций.Я думал, что сравнение шестнадцатеричного значения соответствующего байта в записи ниже текущего может дать нам некоторое представление о том, что это может быть.Но даже в этом случае нет конкретного решения, к которому можно прийти.Решения должны приниматься на каждом этапе, что может повлиять на конечный результат.

Может кто-нибудь сообщить мне, пожалуйста, какие-нибудь из указанных шаблонов, которые я могу найти?Например, для всех COMP-3 каждый кусочек может представлять значение от 0 до 9, и, следовательно, шестнадцатеричное значение байта может быть чем-то вроде [0-9] [0-9].По существу, для переноса данных не нужно беспокоиться о COMPs и COMP-3, поскольку их значение не будет затронуто при переносе.Но выявление полей DISPLAY также оказывается огромной задачей.Может ли кто-нибудь дать какие-то идеи или указать мне направление, которое я могу исследовать дальше?

Любая помощь будет принята с благодарностью.Я действительно застрял здесь.

Спасибо, Адитья.

Ответы [ 3 ]

1 голос
/ 06 апреля 2012

Полагаю, вам нужно идти с вероятностями и надеяться, что данные достаточно разнообразны, чтобы извлечь из этого многое.

  • Любое поле, которое содержит только значения EBCDIC буквенно-цифрового плюс пунктуация
  • Числовые поля DISPLAY будут самыми простыми, содержащие только EBCDIC 0-9. Обратите внимание, что если подписано, то первое число будет заменено на букву, как A, я думаю, -1.
  • Довольно случайное распределение значений, начинающееся с шестнадцатеричных нулей, вероятно, будет двоичными числовыми полями "COMP".
  • Поля COMP-3 представляют собой одну десятичную цифру в каждой шестнадцатеричной цифре данных. Так что, если все шестнадцатеричные цифры равны 0-9, это сильный знак поля comp-3. За исключением последней шестнадцатеричной цифры поля, которая будет содержать C для положительного значения, D для отрицательного значения и F для без знака.
  • Некоторые программы используют пробелы в числовых полях, поэтому, если поле содержит все виды двоичных файлов, а также шестнадцатеричное 40 (пробелы), вероятно, лучше выбросить шестнадцатеричное 40 из смеси. Он может сказать вам, что группа байтов - это одно поле, если они все вместе являются пробелами или все данные вместе.

Что касается нескольких макетов, это сложно. Общим соглашением для записей, которые могут иметь несколько макетов, является наличие ограниченного набора значений «что это за тип данных» в начале записи. Как значимый идентификатор, запись, тип, данные. Таким образом, значительно возрастает значимость идентификатора, в то время как поля recordType изменяются от нескольких значений до повторного цикла.

1 голос
/ 09 сентября 2011

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

Могу ли я угадать предположение? У тебя никто не разбирается в Коболе? Не так сложно обрабатывать тетради Cobol, конечно, не так сложно, как использовать язык только для записи, такой как Perl.

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

0 голосов
/ 14 мая 2012

FileWizard в RecordEditor / JRecord может искать поля Cobol мэйнфреймов в файлах.Результаты FileWizard можно сохранить в файле XML для использования на других языках или использовать функцию копирования для копирования из Ebcdic в фиксированный или CSV-формат Ascii.

Есть некоторые издокументации на File Wizard

...