Code: |
Type Code 10000 12345 11000 12345 30000 12345 20000 12345 11000 45624 25000 45624 34000 33669 30000 33669 |
Code: |
Type Code
10000 12345 11000 12345 30000 12345 20000 12345 34000 33669 30000 33669 |
Aki88 wrote: |
Hello,
This post is taken from another forum. It poses an interesting challenge; posting here to expand the DFSORT expert solution base. Requirement: If first 5 bytes (1,5) of Type is 30000, then for the corresponding code all types should be written to the output file. |
Code: |
//STEP0100 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //INA DD * 10000 12345 11000 12345 30000 12345 20000 12345 11000 45624 25000 45624 34000 33669 30000 33669 //INB DD * 10000 12345 11000 12345 30000 12345 20000 12345 11000 45624 25000 45624 34000 33669 30000 33669 //SORTOUT DD SYSOUT=* //SYSIN DD * OPTION COPY JOINKEYS F1=INA,FIELDS=(12,5,A) JOINKEYS F2=INB,FIELDS=(01,5,A) REFORMAT FIELDS=(F1:1,80) //* //JNF2CNTL DD * INCLUDE COND=(1,5,CH,EQ,C'30000') INREC BUILD=(12,5) //* |
Code: |
10000 12345 11000 12345 30000 12345 20000 12345 34000 33669 30000 33669 |
Code: |
//SORTIN DD * 10000 12345 11000 12345 30000 12345 20000 12345 11000 45624 25000 45624 34000 33669 30000 33669 /* -- -- //SYSIN DD * INREC IFTHEN=(WHEN=(1,5,CH,EQ,C'30000'),OVERLAY=(18:C'1')), IFTHEN=(WHEN=(1,5,CH,NE,C'30000'),OVERLAY=(18:C'9')) SORT FIELDS=(12,7,CH,A) OUTFIL IFTHEN=(WHEN=GROUP,KEYBEGIN=(12,5),PUSH=(21:1,5)) * IFTHEN=(WHEN=(21,5,CH,EQ,C'30000'), * BUILD=(1,16,80:X)) /* |
Code: |
30000 12345 1 30000 10000 12345 9 30000 11000 12345 9 30000 20000 12345 9 30000 30000 33669 1 30000 34000 33669 9 30000 11000 45624 9 11000 25000 45624 9 11000 |
Code: |
//*************************************************************** //* USE ALTSEQ CODE TO TRANSLATE '30000' TO SPACES SO WHEN ** //* SORTED IT WILL BE THE FIRST RECORD. ** //* ** //* '0' = X'F0' | '3' = X'F3' | SPACE = X'40' ** //* ** //* REPLACING X'F3' AND X'F0' WITH X'40' WILL MAKE ** //* '30000' AS ' ' ** //*************************************************************** //* //STEP0100 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD * 30000 00000 <<< FIRST RECORD ***** 10000 11111 11000 11111 20000 11111 30000 11111 <<< LAST RECORD AAAAA ***** 10000 12345 11000 12345 30000 12345 <<< 3RD RECORD 20000 12345 BBBBB ***** 11000 45624 25000 45624 CCCCC ***** 34000 33669 30000 33669 <<< LAST RECORD //SORTOUT DD SYSOUT=* //SYSIN DD * ALTSEQ CODE=(F340,F040) SORT FIELDS=(12,5,CH,A, 01,5,AQ,A) OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN(12,5),PUSH=(81:1,5)) OUTFIL INCLUDE=(81,5,CH,EQ,C'30000'), BUILD=(1,80) //* |
Code: |
30000 00000 <<< FIRST RECORD 30000 11111 <<< LAST RECORD 10000 11111 11000 11111 20000 11111 30000 12345 <<< 3RD RECORD 10000 12345 11000 12345 20000 12345 30000 33669 <<< LAST RECORD 34000 33669 |
Code: |
//SYSIN DD * INREC OVERLAY=(81:SEQNUM,3,ZD,RESTART=(12,5)) ALTSEQ CODE=(F340,F040) SORT FIELDS=(12,5,CH,A, 01,5,AQ,A),EQUALS OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN(12,5),PUSH=(85:1,83)), IFTHEN=(WHEN=INIT, OVERLAY=(81:SEQNUM,3,ZD,RESTART=(12,5))), IFTHEN=(WHEN=(81,9,CH,EQ,C'001 30000',AND, 81,3,CH,NE,165,3,CH), OVERLAY=(85:5X)) OUTFIL INCLUDE=(85,5,CH,EQ,C'30000'), IFOUTLEN=80, IFTHEN=(WHEN=((81,3,CH,EQ,165,3,CH),AND,81,3,ZD,GT,1), BUILD=(01,80,/85,80)) //* |
Code: |
30000 00000 <<< FIRST RECORD 10000 11111 11000 11111 20000 11111 30000 11111 <<< LAST RECORD 10000 12345 11000 12345 30000 12345 <<< 3RD RECORD 20000 12345 34000 33669 30000 33669 <<< LAST RECORD |
Code: |
INREC IFTHEN=(WHEN=(1,5,CH,EQ,C'30000'),OVERLAY=(18:C'1')), IFTHEN=(WHEN=(1,5,CH,NE,C'30000'),OVERLAY=(18:C'9')) SORT FIELDS=(12,7,CH,A) OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN=(12,5),PUSH=(21:1,5)) OUTFIL INCLUDE=(21,5,CH,EQ,C'30000') |
Code: |
30000 12345 1 30000 10000 12345 9 30000 11000 12345 9 30000 20000 12345 9 30000 30000 33669 1 30000 34000 33669 9 30000 |
output generated using printer-friendly topic mod. All times are GMT - 5 Hours