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

Populating Date and Sequence numer in Syncsort


IBM Mainframe Forums -> SYNCSORT
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
PORYES

New User


Joined: 04 Apr 2007
Posts: 38
Location: Chennai

PostPosted: Thu Jul 16, 2020 5:01 pm
Reply with quote

Hi -

I am creating an output file using the below input.
Where I need to include the values in column 20: Values are (AD AM NONAD NONE) followed by DATE(YYMMDDHHMMSS) and SEQ (0000000001) numbers.
Input:
Code:

----+----1----+----2----+----3----+----4----+----5----+----6----+
***************************** Top of Data ***********************
00HEADER                                                         
162020152020 516                                 MISC           
162020152020 516                                 MISC           
162020152020 516                                 MISC           
162020152020 516                                 MISC           
99TRAILER                                                       

My output should be
Code:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-
***************************** Top of Data *****************************
00HEADER                                                               
162020152020 516   AD2007160625450000000001      MISC                 
162020152020 516   AM2007160625450000000002      MISC                 
162020152020 516   NONAD2007160625450000000003   MISC                 
162020152020 516   NONE2007160625450000000004    MISC                 
99TRAILER                                                             


I can achieve using three steps. Is there any other way I can accomplish in one step?
Thanks!
Back to top
View user's profile Send private message
Rohit Umarjikar

Global Moderator


Joined: 21 Sep 2010
Posts: 3049
Location: NYC,USA

PostPosted: Thu Jul 16, 2020 7:25 pm
Reply with quote

Code:

//STEP01  EXEC PGM=SORT                                   
//SORTLIST  DD SYSOUT=*                                               
//SORTIN    DD *                                                       
00HEADER                                                               
162020152020 516                                 MISC                 
162020152020 516                                 MISC                 
162020152020 516                                 MISC                 
162020152020 516                                 MISC                 
99TRAILER                                                             
//SORTOUT   DD SYSOUT=*                                               
//SYSIN     DD *                                                       
 OPTION COPY                                                           
 INREC IFOUTLEN=65,                                                     
       IFTHEN=(WHEN=INIT,                                               
               OVERLAY=(92:SEQNUM,10,ZD,START=0,81:&DATE1,88:&TIME2)), 
       IFTHEN=(WHEN=(1,2,CH,EQ,C'00'),BUILD=(1,65)),                   
       IFTHEN=(WHEN=(92,10,ZD,EQ,0000000001),                           
               BUILD=(1,19,C'AD',81,21,6X,50,15)),                     
       IFTHEN=(WHEN=(92,10,ZD,EQ,0000000002),                           
               BUILD=(1,19,C'AM',81,21,6X,50,15)),                     
       IFTHEN=(WHEN=(92,10,ZD,EQ,0000000003),                           
               BUILD=(1,19,C'NONAD',81,21,3X,50,15)),                   
       IFTHEN=(WHEN=(92,10,ZD,EQ,0000000004),                           
               BUILD=(1,19,C'NONE',81,21,4X,50,15)),                   
       IFTHEN=(WHEN=(1,2,CH,EQ,C'99'),BUILD=(1,65))                       

Output-
Code:
********************************* TOP OF DATA **********************************
00HEADER                                                                       
162020152020 516   AD202007109540000000001      MISC                           
162020152020 516   AM202007109540000000002      MISC                           
162020152020 516   NONAD202007109540000000003   MISC                           
162020152020 516   NONE202007109540000000004    MISC                           
99TRAILER                                                                       
******************************** BOTTOM OF DATA ********************************
Back to top
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Thu Jul 16, 2020 10:26 pm
Reply with quote

Minor update to cater for the requested Date/Time format by the TS.

Code:
//THREE    EXEC PGM=SORT                                         
//SORTIN   DD *                                                     
00HEADER                                                           
162020152020 516                                 MISC               
162020152020 516                                 MISC               
162020152020 516                                 MISC               
162020152020 516                                 MISC               
99TRAILER                                                           
/*                                                                 
//SORTOUT  DD SYSOUT=*                                             
//SYSOUT   DD SYSOUT=*                                             
//SYSIN    DD *                                                     
  OPTION COPY                                                       
  INREC IFOUTLEN=80,IFTHEN=(WHEN=INIT,OVERLAY=(81:DATE1,TIME1)),               
    IFTHEN=(WHEN=GROUP,                                             
      BEGIN=(1,8,CH,EQ,C'00HEADER'),END=(1,9,CH,EQ,C'99TRAILER'),   
      PUSH=(95:SEQ=10)),                                           
    IFTHEN=(WHEN=(95,10,ZD,EQ,+2),BUILD=(1,19,C'AD',83,12,         
                  +1,ZD,LENGTH=10,50:50,30)),                       
    IFTHEN=(WHEN=(95,10,ZD,EQ,+3),BUILD=(1,19,C'AM',83,12,         
                  +2,ZD,LENGTH=10,50:50,30)),                       
    IFTHEN=(WHEN=(95,10,ZD,EQ,+4),BUILD=(1,19,C'NONAD',83,12,       
                  +3,ZD,LENGTH=10,50:50,30)),                       
    IFTHEN=(WHEN=(95,10,ZD,EQ,+5),BUILD=(1,19,C'NONE',83,12,       
                  +4,ZD,LENGTH=10,50:50,30))                       
  END                                                               
/*

Code:
****** **************************** Datenanfang ********************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6-
000001 00HEADER                                                     
000002 162020152020 516   AD2007161838010000000001      MISC       
000003 162020152020 516   AM2007161838010000000002      MISC       
000004 162020152020 516   NONAD2007161838010000000003   MISC       
000005 162020152020 516   NONE2007161838010000000004    MISC       
000006 99TRAILER                                                   
****** **************************** Datenende **********************
Back to top
View user's profile Send private message
PORYES

New User


Joined: 04 Apr 2007
Posts: 38
Location: Chennai

PostPosted: Fri Jul 17, 2020 2:41 pm
Reply with quote

Thanks much Rohit & Joerg!
Back to top
View user's profile Send private message
PORYES

New User


Joined: 04 Apr 2007
Posts: 38
Location: Chennai

PostPosted: Fri Jul 31, 2020 7:23 pm
Reply with quote

Hi -

Now there is a small change in the requirement.

Values:
AD
AM
NONAD
NONE

Now the values are (AD AM NONAD NONE)in the input file and not necessarily in the order mentioned above. The order will get shuffled daily.

Input File:
Code:
----+----1----+----2----+----3----+----4----+----5----+----6----+
***************************** Top of Data ***********************
00HEADER                                                         
162020152020 516                                 MISC      AD               
162020152020 516                                 MISC      NONE
162020152020 516                                 MISC      AM
162020152020 516                                 MISC      NONAD
99TRAILER                                                       


Code:
Output.
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-
***************************** Top of Data *****************************
00HEADER
162020152020 516   AD2007160625450000000001      MISC      AD
162020152020 516   NONE2007160625450000000002    MISC      NONE
162020152020 516   AM2007160625450000000003      MISC      AM
162020152020 516   NONAD2007160625450000000004   MISC      NONAD
99TRAILER


Is there an alternate way to achieve this in one step? Please let me know.
Back to top
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Fri Jul 31, 2020 8:52 pm
Reply with quote

Code:
  OPTION COPY                                                       
  INREC IFOUTLEN=80,IFTHEN=(WHEN=INIT,OVERLAY=(81:DATE1,TIME1)),     
    IFTHEN=(WHEN=GROUP,                                             
      BEGIN=(1,8,CH,EQ,C'00HEADER'),END=(1,9,CH,EQ,C'99TRAILER'),   
      PUSH=(95:SEQ=10)),                                             
    IFTHEN=(WHEN=(95,10,ZD,GE,+2,AND,95,10,ZD,LE,+5),               
      BUILD=(1,19,60,5,83,12,95,10,ZD,SUB,+1,ZD,LENGTH=10,50:50,30),
      HIT=NEXT),                                                     
    IFTHEN=(WHEN=ANY,OVERLAY=(20:20,30,SQZ=(SHIFT=LEFT,LENGTH=30))) 
 END
Back to top
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Sat Aug 01, 2020 12:01 am
Reply with quote

If you always have values assigned and not only the first four, you might want to slightly change to logic.
Code:
//THREE    EXEC PGM=SORT                                             
//SORTIN   DD *                                                     
00HEADER                                                             
162020152020 516                                 MISC      AD       
162020152020 516                                 MISC      NONE     
162020152020 516                                 MISC      AM       
162020152020 516                                 MISC      NONAD     
162020152020 516                                 MISC      UKNWN     
99TRAILER                                                           
/*                                                                   
//SORTOUT  DD SYSOUT=*                                               
//SYSOUT   DD SYSOUT=*                                               
//SYSIN    DD *                                                     
  OPTION COPY                                                       
  INREC IFOUTLEN=80,IFTHEN=(WHEN=INIT,OVERLAY=(81:DATE1,TIME1)),     
    IFTHEN=(WHEN=GROUP,                                             
      BEGIN=(1,8,CH,EQ,C'00HEADER'),END=(1,9,CH,EQ,C'99TRAILER'),   
      PUSH=(95:SEQ=10)),                                             
    IFTHEN=(WHEN=(1,8,CH,NE,C'00HEADER',AND,1,9,CH,NE,C'99TRAILER'),
      BUILD=(1,19,60,5,83,12,95,10,ZD,SUB,+1,ZD,LENGTH=10,50:50,30),
      HIT=NEXT),                                                     
    IFTHEN=(WHEN=ANY,OVERLAY=(20:20,30,SQZ=(SHIFT=LEFT,LENGTH=30))) 
 END                                                                 
/*

Output:
Code:
****** **************************** Datenanfang *****************************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7
000001 00HEADER                                                             
000002 162020152020 516   AD2007312024310000000001      MISC      AD         
000003 162020152020 516   NONE2007312024310000000002    MISC      NONE       
000004 162020152020 516   AM2007312024310000000003      MISC      AM         
000005 162020152020 516   NONAD2007312024310000000004   MISC      NONAD     
000006 162020152020 516   UKNWN2007312024310000000005   MISC      UKNWN     
000007 99TRAILER                                                             
Back to top
View user's profile Send private message
Rohit Umarjikar

Global Moderator


Joined: 21 Sep 2010
Posts: 3049
Location: NYC,USA

PostPosted: Sat Aug 01, 2020 12:36 am
Reply with quote

This would give you what you asked for.

Code:
//S1       EXEC PGM=SORT                                               
//SORTIN   DD *                                                         
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
00HEADER                                                               
162020152020 516                                 MISC      AD           
162020152020 516                                 MISC      NONE         
162020152020 516                                 MISC      AM           
162020152020 516                                 MISC      NONAD       
99TRAILER                                                                                                                           
/*                                                                     
//SORTOUT  DD SYSOUT=*                                                 
//SORTLIST DD SYSOUT=*                                                 
//SYSOUT   DD SYSOUT=*                                                 
//SYSIN    DD *                                                         
  OPTION COPY                                                           
   INREC IFTHEN=(WHEN=INIT,                                             
                OVERLAY=(92:SEQNUM,10,ZD,START=0,81:DATE1,88:TIME1)),   
         IFTHEN=(WHEN=(1,2,CH,EQ,C'00'),OVERLAY=(200:1,65)),           
         IFTHEN=(WHEN=(1,2,CH,EQ,C'99'),OVERLAY=(200:1,65)),           
         IFTHEN=(WHEN=(1,2,CH,NE,C'99'),                               
   OVERLAY=(200:1,19,60,5,83,19,50,15))                                 
  OUTREC FIELDS=(200,43,SQZ=(SHIFT=LEFT,LENGTH=48),243,15)

Output:
Code:

---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8-
********************************* TOP OF DATA **********************************
00HEADER                                                                       
162020152020516AD2007315074100000001            MISC      AD                   
162020152020516NONE2007315074100000002          MISC      NONE                 
162020152020516AM2007315074100000003            MISC      AM                   
162020152020516NONAD2007315074100000004         MISC      NONAD                 
99TRAILER                                                                       
******************************** BOTTOM OF DATA ********************************
Back to top
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Sat Aug 01, 2020 3:18 am
Reply with quote

Code:
//THREE    EXEC PGM=SORT                                       
//SORTIN   DD *                                                 
00HEADER                                                       
162020152020 516                                 MISC      AD   
162020152020 516                                 MISC      NONE
162020152020 516                                 MISC      AM   
162020152020 516                                 MISC      NONAD
99TRAILER                                                       
/*                                                             
//SORTOUT  DD SYSOUT=*                                         
//SYSOUT   DD SYSOUT=*                                         
//SYSIN    DD *                                                 
  OPTION COPY                                                   
  INREC IFTHEN=(WHEN=(1,9,SS,NE,C'00HEADER 99TRAILER'),         
    OVERLAY=(23:DATE1,TIME1,20:60,5,37:SEQNUM,10,ZD,           
             20:20,30,SQZ=(SHIFT=LEFT)))                       
  END                                                           
/*

Output:
Code:
****** **************************** Datenanfang *******************************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
000001 00HEADER                                                               
000002 162020152020 516   AD2007312345120000000001      MISC      AD           
000003 162020152020 516   NONE2007312345120000000002    MISC      NONE         
000004 162020152020 516   AM2007312345120000000003      MISC      AM           
000005 162020152020 516   NONAD2007312345120000000004   MISC      NONAD       
000006 99TRAILER                                                               
****** **************************** Datenende *********************************
Back to top
View user's profile Send private message
PORYES

New User


Joined: 04 Apr 2007
Posts: 38
Location: Chennai

PostPosted: Mon Aug 03, 2020 11:10 am
Reply with quote

Thanks a Lot Joerg & Rohit.
Back to top
View user's profile Send private message
sergeyken

Senior Member


Joined: 29 Apr 2008
Posts: 2012
Location: USA

PostPosted: Mon Aug 03, 2020 8:08 pm
Reply with quote

From the whole discussion I can conclude that there are only, and always only 6 records in the input dataset, and four of them must be updated, isn't it?

If so, the correct solution should be: using ISPF text editor, to manually type missing data into the proper positions of those four records...
36_2_35.gif
Back to top
View user's profile Send private message
Rohit Umarjikar

Global Moderator


Joined: 21 Sep 2010
Posts: 3049
Location: NYC,USA

PostPosted: Tue Aug 04, 2020 8:22 pm
Reply with quote

should work if it just one time request. icon_biggrin.gif
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 -> SYNCSORT

 


Similar Topics
Topic Forum Replies
No new posts Modifying Date Format Using DFSORT DFSORT/ICETOOL 9
No new posts Compare only first records of the fil... SYNCSORT 7
No new posts Need to convert date format DFSORT/ICETOOL 20
No new posts Need help to append a date&tsp at... DFSORT/ICETOOL 9
No new posts Fetch data from programs execute (dat... DB2 3
Search our Forums:

Back to Top