|
View previous topic :: View next topic
|
| Author |
Message |
PORYES
New User

Joined: 04 Apr 2007 Posts: 38 Location: Chennai
|
|
|
|
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 |
|
 |
Rohit Umarjikar
Global Moderator

Joined: 21 Sep 2010 Posts: 3109 Location: NYC,USA
|
|
|
|
| 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 |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1429 Location: Bamberg, Germany
|
|
|
|
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 |
|
 |
PORYES
New User

Joined: 04 Apr 2007 Posts: 38 Location: Chennai
|
|
|
|
| Thanks much Rohit & Joerg! |
|
| Back to top |
|
 |
PORYES
New User

Joined: 04 Apr 2007 Posts: 38 Location: Chennai
|
|
|
|
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 |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1429 Location: Bamberg, Germany
|
|
|
|
| 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 |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1429 Location: Bamberg, Germany
|
|
|
|
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 |
|
 |
Rohit Umarjikar
Global Moderator

Joined: 21 Sep 2010 Posts: 3109 Location: NYC,USA
|
|
|
|
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 |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1429 Location: Bamberg, Germany
|
|
|
|
| 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 |
|
 |
PORYES
New User

Joined: 04 Apr 2007 Posts: 38 Location: Chennai
|
|
|
|
| Thanks a Lot Joerg & Rohit. |
|
| Back to top |
|
 |
sergeyken
Senior Member

Joined: 29 Apr 2008 Posts: 2264 Location: USA
|
|
|
|
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...
 |
|
| Back to top |
|
 |
Rohit Umarjikar
Global Moderator

Joined: 21 Sep 2010 Posts: 3109 Location: NYC,USA
|
|
|
|
should work if it just one time request.  |
|
| Back to top |
|
 |
|
|
 |
All times are GMT + 6 Hours |
|