# Populating Date and Sequence numer in Syncsort

Author Message
PORYES

New User

Joined: 04 Apr 2007
Posts: 38
Location: Chennai

Posted: Thu Jul 16, 2020 5:01 pm

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!
Rohit Umarjikar

Global Moderator

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

Posted: Thu Jul 16, 2020 7:25 pm

 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 ********************************
Joerg.Findeisen

Active User

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

Posted: Thu Jul 16, 2020 10:26 pm

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 **********************
PORYES

New User

Joined: 04 Apr 2007
Posts: 38
Location: Chennai

 Posted: Fri Jul 17, 2020 2:41 pm Thanks much Rohit & Joerg!
PORYES

New User

Joined: 04 Apr 2007
Posts: 38
Location: Chennai

Posted: Fri Jul 31, 2020 7:23 pm

Hi -

Now there is a small change in the requirement.

Values:
AM
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.
Joerg.Findeisen

Active User

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

Posted: Fri Jul 31, 2020 8:52 pm

 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
Joerg.Findeisen

Active User

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

Posted: Sat Aug 01, 2020 12:01 am

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
Rohit Umarjikar

Global Moderator

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

Posted: Sat Aug 01, 2020 12:36 am

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:
Joerg.Findeisen

Active User

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

Posted: Sat Aug 01, 2020 3:18 am

 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 *********************************
PORYES

New User

Joined: 04 Apr 2007
Posts: 38
Location: Chennai

 Posted: Mon Aug 03, 2020 11:10 am Thanks a Lot Joerg & Rohit.
sergeyken
Warnings : 2

Senior Member

Joined: 29 Apr 2008
Posts: 1009

 Posted: Mon Aug 03, 2020 8:08 pm 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...
Rohit Umarjikar

Global Moderator

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

 Posted: Tue Aug 04, 2020 8:22 pm should work if it just one time request.
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics Syncsort- Merging two records into on... SYNCSORT 3 A Rexx who changes date into a JCL?Po... CLIST & REXX 9 Numeric check w/SyncSort. SYNCSORT 1 Date conversion using SORT SYNCSORT 4 Last day of the month via SYNCSORT. SYNCSORT 5
Search our Forums: