IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

skip records while processing but write in o/p


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
utkarshtewari

New User


Joined: 26 Mar 2007
Posts: 9
Location: UK

PostPosted: Fri May 25, 2012 4:25 pm
Reply with quote

Hi,
I have a report starting with first two lines of header and these headers appear after page breaks.
I had to read data from this file and process. I want to keep the first set of headers and copy as it is in the output file but want
to get rid of other headers. How can we do it using sort?

input
----------
1HEADER LINE 1 RUN DATE
HEADER LINE 2
122345576777777777
8888
888888888
99999999
00000987GFFFDSD
456GTREYEYTYEWY
1HEADER LINE 1 RUN DATE
HEADER LINE 2
sdhjlkqkjqdwklwqDSAJDSSDss
SHyuiu q ewdsa
sdsasdsDAfiqeqwoeq
sahjsdakjsadjdjd

Output
-------------
1HEADER LINE 1 RUN DATE
HEADER LINE 2
122345576777777777
8888
888888888
99999999
00000987GFFFDSD
456GTREYEYTYEWY
sdhjlkqkjqdwklwqDSAJDSSDss
SHyuiu q ewdsa
sdsasdsDAfiqeqwoeq
sahjsdakjsadjdjd

Thanks.
Back to top
View user's profile Send private message
Bill Woodger

Moderator Emeritus


Joined: 09 Mar 2011
Posts: 7309
Location: Inside the Matrix

PostPosted: Fri May 25, 2012 4:47 pm
Reply with quote

Add a sequence number in the Sort, OMIT heading lines if sequence number greater than two, loose the sequence number (BUILD for instance) before final output.
Back to top
View user's profile Send private message
Pandora-Box

Global Moderator


Joined: 07 Sep 2006
Posts: 1592
Location: Andromeda Galaxy

PostPosted: Fri May 25, 2012 4:56 pm
Reply with quote

Code:
//SRTJK EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD *
1HEADER LINE 1 RUN DATE
HEADER LINE 2
122345576777777777
8888
888888888
99999999
00000987GFFFDSD
456GTREYEYTYEWY
1HEADER LINE 1 RUN DATE
HEADER LINE 2
SDHJLKQKJQDWKLWQDSAJDSSDSS
SHYUIU Q EWDSA
SDSASDSDAFIQEQWOEQ
SAHJSDAKJSADJDJD
//SYSOUT DD SYSOUT=*
//T2     DD SYSOUT=*
//T1 DD DSN=&&T1,SPACE=(TRK,(5,5)),
//  DISP=(MOD,PASS)
//TOOLIN   DD *
  COPY FROM(IN1) TO(T1) USING(CTL1)
  COPY FROM(T1) TO(T2) USING(CTL2)
//*
//CTL1CNTL DD *
  INREC IFTHEN=(WHEN=(2,14,CH,EQ,C'HEADER LINE 1'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 2'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD))
//CTL2CNTL DD *
  OMIT COND=(81,4,ZD,GT,1)
  OUTREC FIELDS=(1,80)


Output
Code:
1HEADER LINE 1 RUN DATE
HEADER LINE 2
122345576777777777
8888
888888888
99999999
00000987GFFFDSD
456GTREYEYTYEWY
SDHJLKQKJQDWKLWQDSAJDSSDSS
SHYUIU Q EWDSA
SDSASDSDAFIQEQWOEQ
SAHJSDAKJSADJDJD
Back to top
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6966
Location: porcelain throne

PostPosted: Fri May 25, 2012 5:07 pm
Reply with quote

what if there are 3 headers?

suggested control cards (check syntax, probably not correct) based on Bill's solution
UNTESTED
INREC BUILD=(1:1,80,81:SEQNUM,6,ZD)
OUTREC/OUTFIL OMIT=((2,11,CH,EQ,C'HEADER LINE') AND (81,6,ZD,GT,2)),FIELDS=(1,80)


one pass
Back to top
View user's profile Send private message
Pandora-Box

Global Moderator


Joined: 07 Sep 2006
Posts: 1592
Location: Andromeda Galaxy

PostPosted: Fri May 25, 2012 5:14 pm
Reply with quote

dbzTHEdinosauer wrote:
what if there are 3 headers?

suggested control cards (check syntax, probably not correct) based on Bill's solution
UNTESTED
INREC BUILD=(1:1,80,81:SEQNUM,6,ZD)
OUTREC/OUTFIL OMIT=((2,11,CH,EQ,C'HEADER LINE') AND (81,6,ZD,GT,2)),FIELDS=(1,80)


one pass



Even if there are 5 headers the CTL1 one should be modified like
Code:

//TOOLIN   DD *
  COPY FROM(IN1) TO(T1) USING(CTL1)
  COPY FROM(T1) TO(T2) USING(CTL2)
//*
//CTL1CNTL DD *
  INREC IFTHEN=(WHEN=(2,14,CH,EQ,C'HEADER LINE 1'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 2'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD))
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 3'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD))
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 4'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD))
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 5'),
          BUILD=(1:1,80,81:SEQNUM,4,ZD))
//CTL2CNTL DD *
  OMIT COND=(81,4,ZD,GT,1)
  OUTREC FIELDS=(1,80)


This solution should work not sure about efficiency icon_sad.gif
Back to top
View user's profile Send private message
Bill Woodger

Moderator Emeritus


Joined: 09 Mar 2011
Posts: 7309
Location: Inside the Matrix

PostPosted: Fri May 25, 2012 5:36 pm
Reply with quote

Pandora-box, it can all be done in one pass. Use OVERLAY for the sequence, no need to BUILD all the time. Just edited from yours, untested.

Code:
  OPTION COPY
  INREC IFTHEN=(WHEN=(2,14,CH,EQ,C'HEADER LINE 1'),
          OVERLAY=(81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 2'),
          OVERLAY=(81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 3'),
          OVERLAY=(81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 4'),
          OVERLAY=(81:SEQNUM,4,ZD)),
        IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 5'),
          OVERLAY=(81:SEQNUM,4,ZD))
  OMIT COND=(81,4,CH,GT,C'0001')
  OUTREC FIELDS=(1,80)
Back to top
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6966
Location: porcelain throne

PostPosted: Fri May 25, 2012 5:43 pm
Reply with quote

does not OMIT/INCLUDE STATEMENT (which means it is not part of INREC or OUTREC/OUTFIL)
apply before the INREC?

whereas the OMIT/INCLUDE parameters of the INREC/OUTREC/OUTFIL statement apply to the data in the current sort phase.
Back to top
View user's profile Send private message
Pandora-Box

Global Moderator


Joined: 07 Sep 2006
Posts: 1592
Location: Andromeda Galaxy

PostPosted: Fri May 25, 2012 6:06 pm
Reply with quote

Thanks Bill and I have modified your advice slightly

One pass

Code:
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=(2,14,CH,EQ,C'HEADER LINE 1'),
        OVERLAY=(81:SEQNUM,4,ZD)),
      IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 2'),
        OVERLAY=(81:SEQNUM,4,ZD)),
      IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 3'),
        OVERLAY=(81:SEQNUM,4,ZD)),
      IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 4'),
        OVERLAY=(81:SEQNUM,4,ZD)),
      IFTHEN=(WHEN=(1,13,CH,EQ,C'HEADER LINE 5'),
        OVERLAY=(81:SEQNUM,4,ZD))
OUTFIL OMIT=(81,4,CH,GT,C'0001'),BUILD=(1,80)
Back to top
View user's profile Send private message
utkarshtewari

New User


Joined: 26 Mar 2007
Posts: 9
Location: UK

PostPosted: Fri May 25, 2012 8:54 pm
Reply with quote

Thanks everyone...
This was a part of bigger piece but by building up over your inputs i have found a solution.
Back to top
View user's profile Send private message
Skolusu

Senior Member


Joined: 07 Dec 2007
Posts: 2205
Location: San Jose

PostPosted: Fri May 25, 2012 9:46 pm
Reply with quote

utkarshtewari,

Using WHEN=GROUP with RECORDS=n will be much easier to tag the header records and eliminate them. You don't have to validate each and every header record. You just need to identify the first header record and change the value of N in RECORD=n parameter to tag them. In your sample you showed 2 headers. So use RECORDS=2.

Code:

//STEP0100 EXEC PGM=SORT                                   
//SYSOUT   DD SYSOUT=*                                     
//SORTIN   DD *                                           
1HEADER LINE 1 RUN DATE                                   
HEADER LINE 2                                             
122345576777777777                                         
8888                                                       
888888888                                                 
99999999                                                   
00000987GFFFDSD                                           
456GTREYEYTYEWY                                           
1HEADER LINE 1 RUN DATE                                   
HEADER LINE 2                                             
SDHJLKQKJQDWKLWQDSAJDSSDSS                                 
SHYUIU Q EWDSA                                             
SDSASDSDAFIQEQWOEQ                                         
SAHJSDAKJSADJDJD                                           
//SORTOUT  DD SYSOUT=*                                     
//SYSIN    DD *                                           
  SORT FIELDS=COPY                                         
  INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,7,CH,EQ,C'1HEADER'),   
                RECORDS=2,PUSH=(81:ID=5))                 
  OUTFIL BUILD=(1,80),OMIT=(81,5,ZD,GT,1)                 
//*


will produce
Code:

1HEADER LINE 1 RUN DATE       
HEADER LINE 2                 
122345576777777777           
8888                         
888888888                     
99999999                     
00000987GFFFDSD               
456GTREYEYTYEWY               
SDHJLKQKJQDWKLWQDSAJDSSDSS   
SHYUIU Q EWDSA               
SDSASDSDAFIQEQWOEQ           
SAHJSDAKJSADJDJD             
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts Write line by line from two files DFSORT/ICETOOL 7
No new posts Compare only first records of the fil... SYNCSORT 7
No new posts Pulling a fixed number of records fro... DB2 2
No new posts Join multiple records using splice DFSORT/ICETOOL 5
No new posts EZT program to build a flat file with... All Other Mainframe Topics 9
Search our Forums:

Back to Top