Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
From another topic, now locked, I have some code, so I'll put it here.
Since the use of PARSE for this is interesting, I thought I'd do it with the known values:
Code: |
//PARSESRT EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=INIT,
PARSE=(%01=(STARTAT=C'DATA1',
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%02=(STARTAT=C'FINP6',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%03=(STARTAT=C'HOFG4',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%04=(STARTAT=C'KIPL9',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%05=(STARTAT=C'MANS3',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%06=(STARTAT=C'MARG1',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%07=(STARTAT=C'OLIV2',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
PARSE=(%08=(STARTAT=C'SELI5',
ABSPOS=1,
FIXLEN=06))),
IFTHEN=(WHEN=INIT,
BUILD=(%01,
%02,
%03,
%04,
%05,
%06,
%07,
%08))
//SORTIN DD *
MARG1 DATA1 MANS3 SELI5
MANS3 SELI5 MARG1
SELI5 MARG1 DATA1
FINP6 MANS3 HOFG4 MARG1 KIPL9 OLIV2
MANS3 SELI5 |
With STARTAT, if the parsed field is not found, that is the end of the PARSE. So, since some values are missing, so won't be found, there have to be eight PARSEs.
Then just BUILD the eight values.
Output is:
Code: |
DATA1 MANS3 MARG1 SELI5
MANS3 MARG1 SELI5
DATA1 MARG1 SELI5
FINP6 HOFG4 KIPL9 MANS3 MARG1 OLIV2
MANS3 SELI5 |
|
|