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

SEQNUM with, only, break on key


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

New User


Joined: 25 Jan 2007
Posts: 42
Location: france

PostPosted: Fri Nov 15, 2013 5:03 pm
Reply with quote

Hello,

I can not process my file as I wish. Can anyone, please, help me ?
It is a fixed length file RECFM=FB, LRECL=80 whose structure is as follows :

Quote:
A_Key AA
various data
various data
...
A_Key BB
various data
various data
...
A_Key CC
various data
various data


The expected result file is as follows :

Quote:
005 A_Key AA
005 various data
005 various data
005 ...
010 A_Key BB
010 various data
010 various data
010 ...

015 A_Key CC

015 various data
015 various data[/code]

The goal is to group records under the key then insert before each group of records a counter whose initial value is 5 and the increment is 5 with a break on the key.

(WHEN-GROUP) to group records works perfectly.
But I do not go out with SEQNUM and then break on the key.

Do you have any idea ?
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 Nov 15, 2013 5:44 pm
Reply with quote

You need to PUSH ID instead of SEQ
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 Nov 15, 2013 6:30 pm
Reply with quote

In addition, your IDs will b 1,2,3,4,5.... instead of 5,10,15,20,25....

Use IFTHEN=(WHEN=INIT after the WHEN=GROUP to multiply the ID that GROUP put there by five.
Back to top
View user's profile Send private message
tuxama

New User


Joined: 25 Jan 2007
Posts: 42
Location: france

PostPosted: Fri Nov 15, 2013 7:17 pm
Reply with quote

Thanks for your help. It works with this :

Code:

//S01      EXEC PGM=ICETOOL         
//TOOLMSG  DD SYSOUT=*             
//DFSMSG   DD SYSOUT=*             
//IN       DD *                     
THIS_IS_KEY AA                     
AAAAAAAAAAAAAAAAAAAAAAA             
BBBBBBBBBBBBBBBBBBBBBBB             
CCCCCCCCCCCCCCCCCCCCCCC             
THIS_IS_KEY BB                     
DDDDDDDDDDDDDDDDDDDDDDD             
EEEEEEEEEEEEEEEEEEEEEEE             
FFFFFFFFFFFFFFFFFFFFFFF             
THIS_IS_KEY CC                     
GGGGGGGGGGGGGGGGGGGGGGG             
HHHHHHHHHHHHHHHHHHHHHHH             
IIIIIIIIIIIIIIIIIIIIIII             
/*                                 
//OUT      DD SYSOUT=*             
//TOOLIN   DD *                     
COPY FROM(IN) TO(OUT) USING(CTL1)   
/*                                                                     
//CTL1CNTL DD *                                                         
 INREC IFOUTLEN=200,
  IFTHEN=(WHEN=GROUP,BEGIN=(1,9,CH,EQ,C'THIS_IS_KEY'),PUSH=(30:1,14)),
  IFTHEN=(WHEN=INIT,OVERLAY=(50:SEQNUM,7,ZD,RESTART=(30,14))),
  IFTHEN=(WHEN=GROUP,BEGIN=(50,7,ZD,EQ,1),PUSH=(60:ID=7))
  IFTHEN=(WHEN=INIT,BUILD=60,7,ZD,MUL,+5,1X,1,23))             
/*


Before the last IFTHEN=(WHEN=INIT
Code:

---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* TOP OF DATA *********************************
THIS_IS_KEY AA               THIS_IS_KEY AA      0000001   0000001             
AAAAAAAAAAAAAAAAAAAAAAA      THIS_IS_KEY AA      0000002   0000001             
BBBBBBBBBBBBBBBBBBBBBBB      THIS_IS_KEY AA      0000003   0000001             
CCCCCCCCCCCCCCCCCCCCCCC      THIS_IS_KEY AA      0000004   0000001             
THIS_IS_KEY BB               THIS_IS_KEY BB      0000001   0000002             
DDDDDDDDDDDDDDDDDDDDDDD      THIS_IS_KEY BB      0000002   0000002             
EEEEEEEEEEEEEEEEEEEEEEE      THIS_IS_KEY BB      0000003   0000002             
FFFFFFFFFFFFFFFFFFFFFFF      THIS_IS_KEY BB      0000004   0000002             
THIS_IS_KEY CC               THIS_IS_KEY CC      0000001   0000003             
GGGGGGGGGGGGGGGGGGGGGGG      THIS_IS_KEY CC      0000002   0000003             
HHHHHHHHHHHHHHHHHHHHHHH      THIS_IS_KEY CC      0000003   0000003             
IIIIIIIIIIIIIIIIIIIIIII      THIS_IS_KEY CC      0000004   0000003             
******************************** BOTTOM OF DATA *******************************


And finally the result is :
Code:

---+----1----+----2----+----3----+----4----+----5----+----6
********************************* TOP OF DATA *************
              5  THIS_IS_KEY AA                           
              5  AAAAAAAAAAAAAAAAAAAAAAA                   
              5  BBBBBBBBBBBBBBBBBBBBBBB                   
              5  CCCCCCCCCCCCCCCCCCCCCCC                   
             10  THIS_IS_KEY BB                           
             10  DDDDDDDDDDDDDDDDDDDDDDD                   
             10  EEEEEEEEEEEEEEEEEEEEEEE                   
             10  FFFFFFFFFFFFFFFFFFFFFFF                   
             15  THIS_IS_KEY CC                           
             15  GGGGGGGGGGGGGGGGGGGGGGG                   
             15  HHHHHHHHHHHHHHHHHHHHHHH                   
             15  IIIIIIIIIIIIIIIIIIIIIII                   
******************************** BOTTOM OF DATA ***********


Is there a less complicated way to do this ?
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 Nov 15, 2013 7:29 pm
Reply with quote

Try this

Code:
//CTL1CNTL DD *
 INREC IFOUTLEN=200,
  IFTHEN=(WHEN=GROUP,BEGIN=(1,9,CH,EQ,C'THIS_IS_KEY'),PUSH=(60:ID=7)),
  IFTHEN=(WHEN=INIT,BUILD=(60,7,ZD,MUL,+5,1X,1,23))
/*
Back to top
View user's profile Send private message
tuxama

New User


Joined: 25 Jan 2007
Posts: 42
Location: france

PostPosted: Fri Nov 15, 2013 7:45 pm
Reply with quote

Perfect it is much better.
Back to top
View user's profile Send private message
Skolusu

Senior Member


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

PostPosted: Fri Nov 15, 2013 8:10 pm
Reply with quote

tuxama,

Do you really need a 16 byte sequence number? Also why do you have IFOUTLEN=200 when you are only creating just 40 bytes of data?
Back to top
View user's profile Send private message
tuxama

New User


Joined: 25 Jan 2007
Posts: 42
Location: france

PostPosted: Fri Nov 15, 2013 9:25 pm
Reply with quote

No. I made some errors in transcription because the file presented here is an example and is not the one containing the data of my company.

And the correct code should be :
Code:

//TOOLIN   DD *                                     
COPY FROM(IN) TO(OUT) USING(CTL1)                   
/*                                                   
//CTL1CNTL DD *                                     
 INREC IFTHEN=(WHEN=GROUP,                           
               BEGIN=(1,11,CH,EQ,C'THIS_IS_KEY'),   
               PUSH=(30:ID=3)),                     
 IFTHEN=(WHEN=INIT,                                 
         BUILD=(30,3,ZD,MUL,+5,M11,LENGTH=3,         
                1X,                                 
                1,23,                               
                30:X))                               


for this result :

Code:

---+----1----+----2----+----3----+----4----+----5-
********************************* TOP OF DATA ****
005 THIS_IS_KEY AA                               
005 AAAAAAAAAAAAAAAAAAAAAAA                       
005 BBBBBBBBBBBBBBBBBBBBBBB                       
005 CCCCCCCCCCCCCCCCCCCCCCC                       
010 THIS_IS_KEY BB                               
010 DDDDDDDDDDDDDDDDDDDDDDD                       
010 EEEEEEEEEEEEEEEEEEEEEEE                       
010 FFFFFFFFFFFFFFFFFFFFFFF                       
015 THIS_IS_KEY CC                               
015 GGGGGGGGGGGGGGGGGGGGGGG                       
015 HHHHHHHHHHHHHHHHHHHHHHH                       
015 IIIIIIIIIIIIIIIIIIIIIII                       
******************************** BOTTOM OF DATA **
Back to top
View user's profile Send private message
Skolusu

Senior Member


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

PostPosted: Fri Nov 15, 2013 10:55 pm
Reply with quote

tuxama,

So now you just 3 byte sequence field? What happens if you have more than 199 Groups? Since you are incrementing the sequence in multiples of 5 what will you do after you have reached 995 as sequence number? 199 groups will end with 995 as sequence number so what will the 200th group have as sequence number?
Back to top
View user's profile Send private message
tuxama

New User


Joined: 25 Jan 2007
Posts: 42
Location: france

PostPosted: Wed Nov 20, 2013 4:15 pm
Reply with quote

Hi Skolusu,

That's right.
But my case can not have more than 5 groups.
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 Creating additional seqnum/Literal wh... DFSORT/ICETOOL 4
No new posts Break a record into fields, each fiel... SYNCSORT 2
No new posts SEQNUM with TRA=ETOA in OUTREC SYNCSORT 5
No new posts Missing SECTION break DFSORT/ICETOOL 9
No new posts Break Auto update screen without message TSO/ISPF 2
Search our Forums:

Back to Top