2012-09-13 11 views
3

"Acct Nbr :"의 인스턴스를 찾고 "Queue Number :", "Queue Description :"의 앞 줄을 가져올 수있는 텍스트 파일이 있습니다. 대기 행렬 번호 다음의 5 행 ApplNbr이라고합니다. 그 전에 다른 앱이 있다면 항상 5 번째 줄이되지는 않습니다. 이 행은 항상 3 열의 숫자입니다. 예를 들어 "5024 17 110"또는 "964 16 100"파이썬으로 연속되지 않은 여러 줄 잡기

대기열 당 여러 개의 "Acct nbr :"항목이있을 수 있지만 대부분 한 번만 있습니다. 가능한 경우 하나의 대기열 번호 줄 아래에 여러 개의 Acct nbr :을 두는 것이 좋습니다. 이 텍스트 파일에는 수천 개의 항목이 있으며 Acct nbr에 의해 식별되는 이러한 오류를 찾아야합니다. 그러나 각 오류에 대한 대기열 번호, que 설명 및 appl nbr이 필요합니다. 나는 분명히하고 싶다.

원하는 줄을 "->"로 표시했습니다. 나는 python을 사용하고 싶지만 grep과 같은 gnu 유틸리티를 사용하거나 powershell과 같은 다른 스크립팅 언어를 사용할 수 있습니다.

시간과 노력에 감사드립니다. 텍스트

샘플 구문 분석 :

->Queue Number: 87125 Queue Effective Date: 09-05-2012 Queue Scheduled Date: 09-05-2012 

->Queue Description: **Posting File** Processing Queue Type Description: PM File Load Copy 

    Appl QSub Seq Appl     Appl  Return Start  Stop Time of Run 

    Nbr Nbr Nbr Description   Name  Code  Time  Time (In Minutes) 

->386 2  0 Inclearing Processing AH_CLEAR 0  12:07:21 12:07:56  0.583 

    Procedure Complete 
    *************** Batch Application Errors *************** 

->Acct Nbr: 0000000000  Batch Actv Msg: Bank Check Not Processed - Validation Error 

->Batch Oracle Msg: 

->Acct Nbr: 0000000000  Batch Actv Msg: Bank Check Not Processed - Validation Error 

->Batch Oracle Msg: 

원하는 출력 :

Queue Number: 87125 Queue Effective Date: 09-05-2012 Queue Scheduled Date: 09-05-2012 

Queue Description: **Posting File** Processing Queue Type Description: PM File Load Copy 

386 2  0 Inclearing Processing  AH_CLEAR 0  12:07:21 12:07:56  0.583 

Acct Nbr: 0000000000  Batch Actv Msg: Bank Check Not Processed - Validation Error 
Batch Oracle Msg: 

Acct Nbr: 0000000000  Batch Actv Msg: Bank Check Not Processed - Validation Error 
Batch Oracle Msg: 

답변

3

대하여 반복 Queue NumberQueue Description를 최신 기억하는 상태 머신 라인마다. Acct Nbr을 찾을 때 저장된 값을 사용하여 출력을 생성하십시오.

빠른 검증되지 않은 예를 들어, 자신의 필요에 적응하십시오 : 당신의 원 선 이후

class State(object): 

    qnumb = None 
    qdesc = None 

    def feed(self, line): 
     if line.startswith('Queue Number'): 
      self.qnumb = line 
     elif line.startswith('Queue Description'): 
      self.qdesc = line 
     elif line.startswith('Acct Nbr'): 
      return line, self.qnumb, self.qdesc 


def parse(lines): 
    results = [] 
    s = State() 
    for line in lines: 
     entry = s.feed(line) 
     if entry: 
      results.append(entry) 
    return results 
+0

이 답변 주셔서 감사합니다. 이제는 클래스를 사용하는 것을 배워야만 구현할 수 있습니다. :) – user1669104

0

내가 입력을 원하는 라인을 일치하는 정규 표현식을 사용하는 것이라고 생각 특정 형식을 가지고있다. re.search()를 사용하여 원하는 내용으로 일치 객체를 반환 할 수 있습니다.

현재 정규 표현식에 대한 자세한 내용을보실 수 있습니다 : http://docs.python.org/py3k/library/re.html

+0

링크를 제공해 주셔서 감사합니다. regexp도 살펴 보겠습니다. – user1669104

관련 문제