문제

헤더와 세부 레코드가있는 플랫 파일 스키마가 있습니다. 다음과 같이 보입니다.

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

메시지 끝에 두 개의 빈 줄을 추가해야합니다. 지금 여러 레코드가 있으면 다음 출력을 얻습니다.

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***
HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

내가보고 싶은 것은 다음과 같습니다.

HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***


HDR**2401*XX0062484*22750***20081006000000*000*******
LIN**001*788-0538-001*4891-788538010*20000*EA**0000***

이 작업을 수행하기 위해 사용자 정의 파이프 라인 구성 요소를 구축 할 수는 있지만 필요한 것을 얻는 더 간단한 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

플랫 파일 스키마의 구분 기 특성을 사용하여 원하는 것을 달성 할 수 있어야합니다.

예제 파일을 기반으로 다음 레코드 구조가있는 스키마를 만들었습니다.

<Schema>    
  <Root>    
    <HDRGroup>    
      <HDR>    
      <LIN>    

스키마의 루트 노드를 클릭하면이 루트 노드의 속성 목록이 표시됩니다. 하나의 속성 섹션에는 헤더 '플랫 파일'이 있습니다. 이 플랫 파일 섹션에서 설정할 수있는 첫 세 가지 속성은 아동 구분 기호, 아동 분리기 유형 및 어린이 주문입니다.

이곳은 예시를 설정하기 위해 빈 줄 (이 경우 CR LF이지만 필요한대로 다른 것을 설정할 수 있음)을 작성하도록 스키마를 구성하는 곳입니다.

Child Delimiter: 0x0D 0x0A 0x0D 0x0A    
Child Delimiter Type: Hexadecimal    
Child Order: Infix

0x0d 0x0a는 캐리지 리턴 라인 피드이므로 위의 경우 루트 노드의 각 자식 사이에 두 개의 빈 줄을 생성합니다.

그만큼u003CHDRGroup> 그런 다음 각 헤더와 해당 라인이 함께 유지되도록 기능합니다. 구분기 설정을 위해 다음을 설정했습니다.

Child Delimiter: 0x0D 0x0A    
Child Delimiter Type: Hexadecimal    
Child Order: Postfix

그만큼u003CHDR> 그리고u003CLIN> 그런 다음 레코드에는 별표로 구분 된 메시지 라인에 대한 실제 스키마 정의가 포함되어 있습니다.

이 스키마는 당신이 요청한 것과 같은 것처럼 보이는 무언가를 위해 작동합니다. 이런 종류의 플랫 파일 스키마와 파일을 구문 분석하는 방법은 작은 세부 사항에 크게 의존하고 있으며, 어떤 유형의 줄 브레이크가 있는지, 파일 끝에서 줄이 끊어집니다.

구분자를 사용하는 왕자는 서서 설정을 땜질해야 할 것입니다.

다른 팁

신경 쓰는 사람이라면, 나는 마침내이를 달성하기 위해 커스텀 파이프 라인 구성 요소를 썼고 썼습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top