Code: |
BEGINNING RECORD OF THE FILE STDANN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ST100 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx INO xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ... rec1 ... rec2 ... recn D11 STDANN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ST100 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx INO xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ... rec1 ... rec2 ... rec3 ... recn D11 END00000700000003882001241167297 |
Code: |
END 0000070 number of groups extracted (I will have to csalculate it) 0000003882 number of records extracted except ending one (needs to be calculated) 001241167297 number of bytes extracted (I guess I can just avoid it because probably it will be calculated again later) |
Code: |
----+----10---+----2----+----3----+----4 INO 00000 |
Code: |
START RECORD STDANN 2017040800001 ST100 000000 INO 00000 ... D11 STDANN 2017040800002 ST100 000000 INO 12345 ... D11 STDANN 2017040800003 ST100 000000 INO 67891 ... D11 STDANN 2017040800004 ST100 000000 INO 00000 ... D11 END00000040000003882001241167297 |
Code: |
START RECORD STDANN 2017040800001 ST100 000000 INO 00000 ... D11 STDANN 2017040800004 ST100 000000 INO 00000 ... D11 END00000020000000500001241167297 |
fab wrote: |
STDANN, ST100, INO are records types, they are always present and always in that sequence |
Code: |
//STEP0100 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //INA DD DISP=SHR,DSN=Your input VB file //INB DD DISP=SHR,DSN=Same Input VB file //SORTOUT DD SYSOUT=* //SYSIN DD * OPTION COPY,VLSHRT,VLSCMP JOINKEYS F1=INA,FIELDS=(5,9,A),SORTED,NOSEQCK JOINKEYS F2=INB,FIELDS=(5,9,A),SORTED,NOSEQCK JOIN UNPAIRED,F1 REFORMAT FIELDS=(F1:1,4, $ RDW ?, $ MATCH INDICATOR F1:14) $ ACTUAL DATA INCLUDE COND=(5,1,CH,EQ,C'B',OR, 6,5,CH,EQ,C'BEGIN',OR, 6,3,CH,EQ,C'END') INREC IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW 8X, $ SPACES FOR GROUP COUNT 1,2,BI,SUB,+1,BI,LENGTH=2, $ BYTE COUNT 6)), $ ACTUAL DATA IFTHEN=(WHEN=GROUP, BEGIN=(15,6,CH,EQ,C'STDANN'), PUSH=(05:ID=8)) OUTFIL REMOVECC, BUILD=(1,4, $ RDW 15), $ ACTUAL DATA TRAILER1=(5,8, ' NUMBER OF GROUPS EXTRACTED',/, COUNT-1=(M11,LENGTH=8), ' NUMBER OF RECORDS EXTRACTED',/, TOT=(13,2,BI,M11,LENGTH=8), ' NUMBER OF BYTES EXTRACTED') //* //JNF1CNTL DD * OPTION VLSHRT INREC IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW 8X, $ SPACES FOR GROUP KEY C'P', $ PICK FOR INO REC 5)), $ ACTUAL DATA IFTHEN=(WHEN=GROUP, BEGIN=(14,6,CH,EQ,C'STDANN'), PUSH=(05:ID=8)) //* //JNF2CNTL DD * OPTION VLSCMP INCLUDE COND=(5,3,CH,EQ,C'INO') INREC IFOUTLEN=13, IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW SEQNUM,8,ZD, $ SEQNUM FOR GROUP KEY X, $ SPACES FOR INO REC 5)), $ ACTUAL DATA IFTHEN=(WHEN=(14,3,CH,EQ,C'INO',AND, 49,4,CH,EQ,C'0000'), OVERLAY=(13:C'P')) $ PICK FOR INO REC //* |
Code: |
END03300610017430781001241167297 00000236 NUMBER OF GROUPS EXTRACTED 00012556 NUMBER OF RECORDS EXTRACTED 00949999 NUMBER OF BYTES EXTRACTED |
Code: |
END00002360000012556000000949999 |
Fab wrote: |
It worked, just ending record is not formatted as I would need
|
Code: |
and finally by the number of bytes extracted, so ending record is composed by 3 counters like this: END 0000070 number of groups extracted (I will have to csalculate it) 0000003882 number of records extracted except ending one (needs to be calculated) 001241167297 number of bytes extracted (I guess I can just avoid it because probably it will be calculated again later) |
Code: |
----+----1----+----2----+----3----+----4--- TSTDEMA SXNXSXXX |
Code: |
----+----1----+----2----+----3-- END03300610017430781001241167297 |
Code: |
END0330061|0017430781|001241167297 |
Code: |
//SYSIN DD * OPTION COPY JOINKEYS F1=INA,FIELDS=(5,9,A),SORTED,NOSEQCK JOINKEYS F2=INB,FIELDS=(5,9,A),SORTED,NOSEQCK REFORMAT FIELDS=(F1:1,4, $ RDW 14) $ ACTUAL DATA INREC IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW 7X, $ SPACES FOR GROUP COUNT 1,2,BI,PD,LENGTH=2, $ BYTE COUNT 5)), $ ACTUAL DATA IFTHEN=(WHEN=GROUP, BEGIN=(14,6,CH,EQ,C'STDANN'), PUSH=(05:ID=7)) OUTFIL REMOVECC, BUILD=(1,4, $ RDW 14), $ ACTUAL DATA HEADER1=('TSTDEMA',36:'SXNXSXXX'), TRAILER1=('END',5,7, COUNT+1=(M11,LENGTH=10), TOT=(12,2,PD,M11,LENGTH=12)) //* //JNF1CNTL DD * OPTION VLSCMP OMIT COND=(5,7,CH,EQ,C'TSTDEMA',OR, 5,3,CH,EQ,C'END') INREC IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW 8X, $ SPACES FOR GROUP KEY C'P', $ PICK FOR INO REC 5)), $ ACTUAL DATA IFTHEN=(WHEN=GROUP, BEGIN=(14,6,CH,EQ,C'STDANN'), PUSH=(05:ID=8)) //* //JNF2CNTL DD * OPTION VLSCMP INCLUDE COND=(5,3,CH,EQ,C'INO') INREC IFOUTLEN=13, IFTHEN=(WHEN=INIT, BUILD=(1,4, $ RDW SEQNUM,8,ZD, $ SEQNUM FOR GROUP KEY X, $ SPACES FOR INO REC 5)), $ ACTUAL DATA IFTHEN=(WHEN=(14,3,CH,EQ,C'INO',AND, 49,4,CH,EQ,C'0000'), OVERLAY=(13:C'P')) $ PICK FOR INO REC //* |
output generated using printer-friendly topic mod. All times are GMT - 5 Hours