알려지지 않은 값으로 고정 된 위치를 기준으로 여러 파일로 분할하려는 경우 데이터를 정렬해야하고 (분할 할 필드에서) WHR = GROUP을 OUTREC에서 사용해야합니다 여러 개의 OUTFIL에서 INCLUDE 할 수있는 것이 있어야합니다.
//SYSIN DD *
SORT FIELDS=(6,4,CH,A)
OUTREC IFTHEN=(WHEN=GROUP,
KEYBEGIN=(6,4),
PUSH=(81:ID=2))
OUTFIL INCLUDE=(81,2,CH,EQ,C'01'),
FNAMES=OUT1,
BUILD=(1,80)
OUTFIL INCLUDE=(81,2,CH,EQ,C'02'),
FNAMES=OUT2,
BUILD=(1,80)
OUTFIL SAVE,
FNAMES=OUTA,
BUILD=(1,80)
//SORTIN DD *
1234 ABCD
3991 ABCD
3818 ABCD
1939 PQRS
2838 PQRS
1939 ABCD
2819 PQRS
2102 FILQ
2911 ABCD
3912 FILQ
을 제공합니다 :
OUT1
1234 ABCD
1939 ABCD
2911 ABCD
3991 ABCD
3818 ABCD
OUT2
3912 FILQ
2102 FILQ
OUTA
1939 PQRS
2819 PQRS
2838 PQRS
것은 내가 테스트를 위해 80 바이트의 고정 길이 레코드를 사용했습니다. 레코드 길이가 다른 경우 81로 모든 참조를 레코드 길이 + 길이로 변경하고 모든 참조를 레코드 길이로 80로 변경하십시오.
데이터가 가변 길이 레코드에있는 경우 이전에 언급 했어야합니다. 코드가 다릅니다.
WHEN = GROUP은 그룹을 정의하며 그룹 정의의 정보를 그룹의 모든 레코드에 적용 할 수 있습니다 (PUSH 사용). ID (그룹의 순번)와 SEQ (그룹의 순차 번호)의 두 가지 특수 필드를 사용할 수 있습니다. ID = 2는 그룹에 대한 두 자리 숫자 시퀀스 번호를 의미합니다. 이렇게하면 코드가 잘못되기 전에 최대 100 개의 그룹이 허용됩니다.
10 개의 OUTFIL이 있습니다 (세 개를 보여줍니다). 마지막 OUTFIL (나는 OUTA라고 불렀습니다)에 INCLUDE 대신 SAVE를 사용할 것을 제안합니다. SAVE는 "다른 OUTFIL에없는 모든 레코드가 여기에옵니다"를 의미합니다. 그룹이 10 개 이상이라도 적어도 100 개 그룹을 초과 할 때까지 모든 데이터를 보유하게됩니다.
PUSH는 모든 유형의 리터럴 값, 위에서 언급 한 특수 필드 및 그룹을 정의하는 레코드의 데이터 만 사용할 수 있다는 점을 제외하면 OVERLAY와 유사합니다.
이 PUSH는 레코드를 확장합니다. 이를 임시 확장자로 만들려면 각 OUTFIL의 BUILD가 각 레코드를 원래 크기로 리턴하십시오.
데이터의 예를 제공하고 원하는 결과를 표시하십시오. – SaggingRufus
안녕하세요. 설명에 예제를 제공했습니다. – user218324
그래서 처리하기 전에 2 열에 무엇이 들어 있을지 알 수 없지만 다른 문자가 있어야합니다 값에 따라 파일? 얼마나 많은 파일이있을 수 있습니까? – SaggingRufus