У нас есть много файлов мэйнфреймов в формате EBCDIC. Есть ли в Python способ проанализировать или преобразовать файл мэйнфрейма в CSV-файл или текстовый файл?

Мне нужно прочитать записи из файла мэйнфрейма и применить некоторые фильтры к значениям записей. Поэтому я ищу решение для преобразования файла мейнфрейма в CSV или текст или книгу Excel, чтобы я мог легко выполнять операции с файлом.

Мне также нужно проверить количество записей.


person umesh    schedule 12.06.2019    source источник
comment
Дубликат этого ответа?   -  person PeterT    schedule 12.06.2019
comment
@PeterT это не текстовый файл, как мы можем прочитать файл, который не является . текстовый файл?   -  person umesh    schedule 12.06.2019
comment
Это зависит от содержимого: это может быть что угодно. Может файл SAS, может еще что-то, мы не можем догадаться за вас. Лучший, а часто и единственный способ — открыть файлы с помощью оригинального программного обеспечения, которое их создало, и экспортировать во что-то более переносимое и документированное.   -  person    schedule 12.06.2019
comment
это не текстовый файл - разве EBCDIC не просто представление текстовых данных? en.wikipedia.org/wiki/EBCDIC   -  person Tim Williams    schedule 12.06.2019
comment
Такое часто встречается. вот некоторые вещи вы можете рассмотреть.   -  person cschneid    schedule 13.06.2019
comment
У вас есть тетрадь Cobol??? в этом случае можно использовать StingRay, также посмотрите stackoverflow. com/questions/56437665/   -  person Bruce Martin    schedule 13.06.2019
comment
@umesh у вас есть макет записи файла, который вы пытаетесь использовать. В отличие от CSV, в данных мэйнфреймов есть естественные разрывы. Однако они обычно разбиваются на основе смещения и типа данных.   -  person Hogstrom    schedule 13.06.2019
comment
Почему бы не использовать для фильтрации уже существующие инструменты на мейнфрейме?   -  person Kevin McKenzie    schedule 13.06.2019


Ответы (2)


Кто сказал что-нибудь о EBCDIC? ОП этого не сделал.

Если это это весь текст, то FTP-перевод с EBCDIC в ASCII выполним, в том числе в Python.

Если нет, то либо:

  • Извлечение и преобразование в CSV должно происходить в z/OS. Возможно, с помощью программы COBOL. Затем CSV можно отправить по FTP с помощью

or

  • Данные должны быть переданы по FTP в ДВОИЧНОМ виде, а затем проанализированы и переведены по частям.

Но, как это часто бывает, нам нужно больше информации.

person Martin Packer    schedule 13.06.2019
comment
Кто сказал что-нибудь о EBCDIC? ОП этого не сделал. - кроме названия.... - person piet.t; 14.06.2019
comment
Верно. Но ВСЕ EBCDIC? Или там какой-то бинарник? - person Martin Packer; 15.06.2019

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

Вот образец записи. Я добавил несколько строк, чтобы визуализировать смещения данных, используемые в коде для доступа к данным:

          1         2         3         4         5         6         7         8         9
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
N 4000000 PROD     19114 06:27:04.07 JOB02679 00000090  $HASP373 PWUB02#C STARTED - INIT 17

Обратите внимание на фиксированные позиции столбцов для различных элементов и на то, как на них ссылаются по положению. Используя этот метод, вы можете обработать файл и создать CSV с выводом, который вы хотите обработать в Excel.

В моем случае я использовал Python 3.

def processBaseMessage(self, message):    
        self.command  = message[1]
        self.routing  = list(message[2:9])
        self.routingCodes = []                       # These are routing codes extracted from the system log.
        self.sysname  = message[10:18]
        self.date     = message[19:24]
        self.time     = message[25:36]
        self.ident    = message[37:45]
        self.msgflags = message[46:54]
        self.msg      = [ message[56:] ]

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

person Hogstrom    schedule 23.06.2019