2014-09-06 5 views
1

ASCII 형식으로 변환해야하는 EBCDIC 코딩 된 메인 프레임 파일이 있습니다. 어떤 라이브러리/도구를 사용하여이를 수행 할 수 있습니까? 나는 파이썬에 가장 익숙하다.메인 프레임 EBCDIC 파일 읽기

내가받은 파일에는 파일이 들어있는 요리 책 (아래에 있습니다)이 있습니다.

'C', 'P'및 'B'는 무엇을 의미합니까? 나는 C = character, B = byte, P = packed number를 추측하고있다?

1:----------------------------------------------------------------------------------------------------------------------------------: 
:LAYOUT NAME:   B224E   DATE: 02/20/14   PAGE 7 OF 14: 
:      -------     --------    --- ---: 
:COBOL: PAN-NAME: NONE     COPYLIB-NAME: RECB224E     : 
:     --------------------    --------------------  : 
:BAL : PAN-NAME: NONE     COPYLIB-NAME: NONE      : 
:------------------------------------------------------------------------------: 
:TYPE OF RECORD: EXTENDED SORT KEY AREA - SEGMENT "A" (OPTIONAL)    : 
:------------------------------------------------------------------------------: 
:POSITION : LENGTH : TYPE : DESCRIPTION          : 
:----------:--------:------:---------------------------------------------------: 
:   :  :  :             : 
:   :  :  :             : 
:   :  :  :             : 
:001 - 001 : 1 : C : SEGMENT IDENTIFIER - "A"       : 
:   :  :  :             : 
:002 - 003 : 2 : P : SEGMENT LENGTH         : 
:   :  :  :             : 
:004 - ??? : ??? : C : EXTENDED SORT KEY AREA       : 
:   :  :  :             : 
+0

바보 같은 아이디어입니다. 10 진수 및 2 진수 필드가있는 경우에는 작동하지 않습니다. 자세한 내용은'ebcdic '태그가 붙은 최근의 질문을보십시오. 하지 마. 파일을 제공하는 사람들이 좌절하지 마십시오. 파일을 텍스트 전용으로 제공해야하며 파일 전송 프로세스가 변환을 수행해야합니다. 다른 것은 감사를 실패해야합니다. 감사관 : "그렇다면 데이터 파일을받은 다음 변경하기 전에 데이터 파일을 변경하겠습니까?" 너 : "예, 인터넷에서 무작위로 추출한 코드를 가져 왔습니다." 감사원은 Big Red Marker-Pen을 제거하고 페이지에 A4 크기의 'X'를 그립니다. –

+0

그렇습니다. 일종의 종으로서 우리는 30 년 넘게 다양한 아키텍처, 특히 IBM 호스트 및 인텔 클라이언트를 대상으로이 작업을 해오 고 있습니다. 파일은 필드 수준에서 매핑되어야하며 각 필드에 대해 변환이 적용됩니다. 때로는 이것을 템플릿이라고합니다. 소비자 수준에서이를 수행 할 ETL 제품이 많이 있습니다. 특히 "DataStage". Python을 텍스트로 사용하면 처음부터이 작업을 수행 할 수 있으며 숫자 필드는 IBM037 또는 IBM500에서 ascii로 쉽게 매핑해야합니다. 바이너리는 일반적으로 크기가 설정됩니다 (하프 워드 업). P에 대한 비트 연산입니다. – mckenzm

답변

4

codecs 모듈을 살펴보십시오. standard encodings table에서 EBCDIC은 cp-500으로 알려져 있습니다. 다음과 같은 뭔가 작업을해야합니다 :

with open("EBCDIC.txt", "rt", "cp500") as ebcdic: 
    print(ebcdic.read()) 

편리 EBCDIC를 파일을 가지고 있지 : mpez0으로

import codecs 

with open("EBCDIC.txt", "rb") as ebcdic: 
    ascii_txt = codecs.decode(ebcdic, "cp500") 
    print(ascii_txt) 

는 파이썬 3를 사용하는 경우, 당신은이에 코드를 축소 할 수 있습니다, 코멘트에 주목 , 나는 이것을 시험 할 수는 없지만, 시작하기에 충분할 것입니다.

+0

Python3을 사용하면 열 수 있습니다 ("EBCDIC.txt", "rt", encoding = "cp500"). 또한 "cp500"에는 대시 또는 밑줄이 없습니다. – mpez0

+0

@ mpez0 죄송합니다. 내 잘못, 고쳐 드리겠습니다. – MattDMo

+0

파일이 텍스트가 아닙니다. 이 예제는 압축 필드를 포함하고 있으며 이진 데이터가 참조 될 가능성이 높기 때문에 다른 레코드가있는 것으로 보입니다. 파일을 휴지통으로 만듭니다. –