Joined: 17 Mar 2006 Posts: 174 Location: Bangalore
Hi,
I am not sure if the below logic can be done in a single step. Please let me know if this logic can be modified in a simpler way.
Code:
//STEP20 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTIN DD *
C33 NOT IN A GROUP
HDR START GROUP1
A01 GROUP 1 RECORD 8711
B02 GROUP 1 RECORD
C03 GROUP 1 RECORD
TRL END GROUP1
R24 NOT IN A GROUP
T02 NOT IN A GROUP
HDR START GROUP2
D04 GROUP 2 RECORD
E05 GROUP 2 RECORD
TRL END GROUP2
F97 NOT IN A GROUP
HDR START GROUP3
D04 GROUP 3 RECORD 8711
E05 GROUP 3 RECORD
TRL END GROUP3
F97 NOT IN A GROUP
//SORTOUT DD DSN=&&TEMP1,DISP=(NEW,PASS)
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,3,CH,EQ,C'HDR'),
PUSH=(31:1,30,81:ID=1),END=(1,3,CH,EQ,C'TRL')),
IFTHEN=(WHEN=(20,4,CH,NE,C'8711',AND,
31,3,CH,EQ,C'HDR'),OVERLAY=(31:20X))
/*
//STEP30 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTIN DD DSN=&&TEMP1,DISP=(OLD,DELETE)
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,BEGIN=(20,4,CH,EQ,C'8711'),
END=(1,3,CH,EQ,C'TRL'),PUSH=(82:ID=1))
OUTFIL IFOUTLEN=30,OMIT=(82,1,CH,EQ,C' '),
IFTHEN=(WHEN=(82,1,CH,NE,C' ',AND,20,4,CH,EQ,C'8711'),
BUILD=(1:31,25,/,1:1,80)),
IFTHEN=(WHEN=(20,4,CH,EQ,C' '),BUILD=(1,30))
/*
Output:-
Code:
HDR START GROUP1
A01 GROUP 1 RECORD 8711
B02 GROUP 1 RECORD
C03 GROUP 1 RECORD
TRL END GROUP1
HDR START GROUP3
D04 GROUP 3 RECORD 8711
E05 GROUP 3 RECORD
TRL END GROUP3
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
You are COPYing only. If you change the INREC in 2nd step to OUTREC you can put the code into the first step. If the existing code is working, that should be worth trying. Should already have been worth trying....
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
If your intention is to get the groups with 8711 then you can do it all in a single step. I assumed that your code 8711 occurs on the 2nd record in the group.
Use the following DFSORT JCL which will give you the desired results
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
C33 NOT IN A GROUP
HDR START GROUP1
A01 GROUP 1 RECORD 8711
B02 GROUP 1 RECORD
C03 GROUP 1 RECORD
TRL END GROUP1
R24 NOT IN A GROUP
T02 NOT IN A GROUP
HDR START GROUP2
D04 GROUP 2 RECORD
E05 GROUP 2 RECORD
TRL END GROUP2
F97 NOT IN A GROUP
HDR START GROUP3
D04 GROUP 3 RECORD 8711
E05 GROUP 3 RECORD
TRL END GROUP3
F97 NOT IN A GROUP
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,3,CH,EQ,C'HDR'),
END=(1,3,CH,EQ,C'TRL'),PUSH=(31:1,30,SEQ=8)),
IFTHEN=(WHEN=GROUP,BEGIN=(61,8,ZD,EQ,2),
END=(1,3,CH,EQ,C'TRL'),PUSH=(70:20,4))
Joined: 17 Mar 2006 Posts: 174 Location: Bangalore
Yes that's exactly I was trying Skolusu, But the code 8711 can occur in any record after HDR but before TRL. In my example I tried it was unfortunately on 2nd record.
Please let me know if you have any solution or logic?
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
shrivatsa wrote:
Yes that's exactly I was trying Skolusu, But the code 8711 can occur in any record after HDR but before TRL. In my example I tried it was unfortunately on 2nd record.
Please let me know if you have any solution or logic?
Are you aware that your current solution you coded does NOT handle that. If your 8711 record occurs anywhere then you have to SORT the file.
Let me know if you are interested in a SORT solution.
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
Oh well here is the solution to handle 8711 occurring any where
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
C33 NOT IN A GROUP
HDR START GROUP1
B02 GROUP 1 RECORD
C03 GROUP 1 RECORD
A01 GROUP 1 RECORD 8711
TRL END GROUP1
R24 NOT IN A GROUP
T02 NOT IN A GROUP
HDR START GROUP2
D04 GROUP 2 RECORD
E05 GROUP 2 RECORD
TRL END GROUP2
F97 NOT IN A GROUP
HDR START GROUP3
D04 GROUP 3 RECORD 8711
E05 GROUP 3 RECORD
TRL END GROUP3
F97 NOT IN A GROUP
//SORTOUT DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,OVERLAY=(47:C'A')),
IFTHEN=(WHEN=GROUP,BEGIN=(1,3,CH,EQ,C'HDR'),
END=(1,3,CH,EQ,C'TRL'),PUSH=(31:ID=8,SEQ=8)),
IFTHEN=(WHEN=(20,4,CH,EQ,C'8711'),OVERLAY=(47:X))
SORT FIELDS=(31,8,CH,A,47,1,CH,A),EQUALS