2017-11-29 11 views
0

syncsort를 사용하여이 문제점을 관리하는 방법을 매뉴얼에서 알 수 없습니다 (도움이되지 않은 dfsort로 솔루션을 찾았습니다). (FB/LRECL 250) 파일에 중복 된 레코드가 있습니다.z/OS Syncsort : 정렬없이 중복을 생략하십시오.

    다음은 어디 까지나 고정되어 있습니다 : 프로그래머, 테스트, 품질 확인, 배포 ...
  • 헤더 라인은
  • 트레일러가 데이터 라인을 포함 (일부 레코드의 논리적 인 관계를 의무로 인해)
  • 이후의 중복 데이터를 생략 할 필요가 라인하지만 하나 개의 고유 한
  • 데이터 라인을 정렬하지 않아야 존재 카운트.

크기가 (2mio보다 큰) 파일은 수동으로 편집 할 수 없습니다.

예를 들어 INFILE :

HEADER xxxx 
cccc 
bbbb 123 
bbbb 123 
bbbb 123 
dddd 
aaaa 123 
aaaa 123 
aaaa 
TRAILER COUNT: 8 

OUTFILE 예상 :

HEADER xxxx 
cccc 
bbbb 123   
dddd 
aaaa 123 
aaaa 
TRAILER COUNT: 5 

는 그래서 OUTFILE 전혀 분류되지 않으며, 생략 된 기록

bbbb 123   (omitted) 
bbbb 123   (omitted) 
aaaa 123   (omitted) 

는 전혀 필요하고 수도 없습니다 너바나로 곧장 들어 가라.

(나는 심지어 내가 쉽게 수동으로 후속 작업의 라인을 생성 널링 수 있기 솔루션 헤더/트레일러를 생략에 만족하실 것입니다.) 당신의 도움을 위해

감사합니다!

답변

0

두 개의 SYNCSORT 단계를 사용하여 예상 한 결과를 얻을 수있었습니다.

단계 1 :

INREC FIELDS=(1:SEQNUM,4,ZD,5:1,8) 
SORT FIELDS=(5,8,CH,A),SKIPREC=1 
SUM FIELDS=NONE 

INREC를 사용하여, I는 실제 데이터의 기록 다음에 제 4 바이트의 시퀀스 번호를 추가했다. 그런 다음 파일로 처음 8 바이트를 키로 정렬했습니다. SKIPREC을 사용하여 헤더 레코드를 건너 뜁니다.

단계 2 : 2 단계

SORT FIELDS=(1,4,CH,A)            
OUTFIL FNAMES=SORTOF01,REMOVECC,          
OUTREC=(1:5,8,80:X),TRAILER1=('TRAILER COUNT:',COUNT=(M11,LENGTH=8)) 

1 단계로부터의 출력 파일은 입력으로 판독하고있다. 데이터 라인을 정렬하지 않기를 기대하면서 시퀀스 번호를 키로 입력을 정렬했습니다. OUTREC을 사용하여 최종 출력 파일에 시퀀스 번호를 쓰는 것을 금지합니다. 나는 TRAILER1을 사용하여 마지막 레코드 수를 인쇄했습니다.

희망이 도움이됩니다. 보다 효율적으로 작업 할 수있는 대안이 있다면 알려 주시기 바랍니다.

0

아래 분류 카드를 참조하십시오. 위에 나온 샘플 데이터 용으로 제작되었습니다.

//SORTOUT DD SYSOUT=*             
//SYSIN DD *               
OPTION COPY               
INREC FIELDS=(1,50,SEQNUM,7,ZD,RESTART=(1,8))       
OUTFIL REMOVECC,OMIT=(51,7,ZD,GT,01,|,1,7,CH,EQ,C'TRAILER'),   
     OUTREC=(1,50),TRAILER1=(C'TRAILER COUNT:',COUNT-1=(M11,LENGTH=8)) 
/*