Gee, and here I'm just now finding out DF/SORT isn't feature rich. Stunning, but I'm glad I retired last year, sigh.
Sent from BlueMail On May 27, 2016, 2:38 PM, at 2:38 PM, Massimo Biancucci <[email protected]> wrote: >I really thank you for your support. > >Anyway the real dataset is really complicated, the number of fields is >higher than that and it could be a nightmare using such a technique. > >The manual did give me a "small light" and I see it was not what I was >looking for. > >If it makes sense, you could think to improve the product in the >future. > >Thanks again. >Massimo > >2016-05-27 18:34 GMT+02:00 Sri h Kolusu <[email protected]>: > >> Massimo, >> >> Your issue is not with PARSE but you wanting to perform a horizontal >sort >> based on the values. So here is a Job that would give you the desired >> results. You need to parse the data and then validate the values and >> arrange them accordingly. >> >> //STEP0100 EXEC PGM=SORT >> //SYSOUT DD SYSOUT=* >> //SORTIN DD * >> *F00:FIELD00*F01:FIELD01*F02:FIELD02* >> *F01:FIELD01*F00:FIELD00*F02:FIELD02* >> *F02:FIELD02*F00:FIELD00*F01:FIELD01* >> *F00:FIELD00*F02:FIELD02* >> *F00:FIELD00*F02:FIELD02*F01:FIELD01* >> *F02:FIELD02*F01:FIELD01* >> //SORTOUT DD SYSOUT=* >> //SYSIN DD * >> OPTION COPY >> INREC PARSE=(%01=(STARTAFT=C'*', >> ENDBEFR=C':', >> FIXLEN=3), >> %02=(ENDBEFR=C'*', >> FIXLEN=15), >> %03=(ENDBEFR=C':', >> FIXLEN=3), >> %04=(ENDBEFR=C'*', >> FIXLEN=15), >> %05=(ENDBEFR=C':', >> FIXLEN=3), >> %06=(ENDBEFR=C'*', >> FIXLEN=15)), >> BUILD=(01:%01,C'=',%02, >> 21:%03,C'=',%04, >> 41:%05,C'=',%06) >> >> *** RE-ARRANGE THE VALUES F00,F01,F02 VALUES *** >> >> OUTREC IFTHEN=(WHEN=(01,3,CH,GE,21,3,CH), >> BUILD=(01:21,20,21:01,20,41:41,20),HIT=NEXT), >> IFTHEN=(WHEN=(21,3,CH,GE,41,3,CH), >> BUILD=(01:01,20,21:41,20,41:21,20),HIT=NEXT), >> IFTHEN=(WHEN=(01,3,CH,GE,21,3,CH), >> BUILD=(01:21,20,21:01,20,41:41,20),HIT=NEXT), >> >> *** CHECK FOR F00 AND F01 IF IT IS IN ITS RIGHT SLOT ** >> >> IFTHEN=(WHEN=(01,3,CH,EQ,C' ',AND,21,3,CH,EQ,C'F00'), >> BUILD=(01:21,20,21:C'F01=',41:41,20),HIT=NEXT), >> IFTHEN=(WHEN=(21,3,CH,EQ,C' ',AND,41,3,CH,EQ,C'F01'), >> BUILD=(01:21,20,21:41,20,41:C'F02='),HIT=NEXT), >> >> *** INIT F00 F01 F02 INIT VALUES FOR MISSING VALUES ** >> >> IFTHEN=(WHEN=(01,3,CH,EQ,C' '), >> OVERLAY=(01:C'F00=',15X),HIT=NEXT), >> IFTHEN=(WHEN=(21,3,CH,EQ,C' '), >> OVERLAY=(21:C'F01=',15X),HIT=NEXT), >> IFTHEN=(WHEN=(41,3,CH,EQ,C' '), >> OVERLAY=(41:C'F02=',15X),HIT=NEXT) >> //* >> >> The output from this job is >> >> F00=FIELD00 F01=FIELD01 F02=FIELD02 >> F00=FIELD00 F01=FIELD01 F02=FIELD02 >> F00=FIELD00 F01=FIELD01 F02=FIELD02 >> F00=FIELD00 F01= F02=FIELD02 >> F00=FIELD00 F01=FIELD01 F02=FIELD02 >> F00= F01=FIELD01 F02=FIELD02 >> >> >> Further if you have any questions please let me know >> >> Thanks, >> Sri Hari Kolusu >> DFSORT Development >> IBM Corporation >> >> >> >> From: Massimo Biancucci <[email protected]> >> To: [email protected] >> Date: 05/27/2016 08:40 AM >> Subject: Re: Sort PARSE, ABSPOS and SUBPOS. How to PARSE when >one >> or more fields are missed. >> Sent by: IBM Mainframe Discussion List ><[email protected]> >> >> >> >> In my mind there was something "parse the record and find the >fields". >> >> So, starting from this input: >> >> *F00:FIELD00*F01:FIELD01*F02:FIELD02* >> *F01:FIELD01*F00:FIELD00*F02:FIELD02* >> *F02:FIELD02*F00:FIELD00*F01:FIELD01* >> *F00:FIELD00*F02:FIELD02* >> *F00:FIELD00*F02:FIELD02*F01:FIELD01* >> *F02:FIELD02*F01:FIELD01* >> >> I'm expecting: >> >> F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> >> F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> >> F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> >> F00=FIELD00 -F01= -F02=FIELD02 - >> >> F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> >> F00= -F01=FIELD01 -F02=FIELD02 - >> >> >> because at record n.4 F00 and F02 are present and at record n. 5 both >F01 >> and F02 are present. >> >> Hope it's clear now. >> >> Thanks a lot. >> Massimo >> >> >> 2016-05-27 17:30 GMT+02:00 Sri h Kolusu <[email protected]>: >> >> > Massimo, >> > >> > It is not clear as to what you are trying to do. Can you please >show us >> > the desired output from the sample you have given? Also please tell >us >> > about the DCB properties of the input and output datasets. >> > >> > Thanks, >> > Sri Hari Kolusu >> > DFSORT Development >> > IBM Corporation >> > >> > >> > >> > From: Massimo Biancucci <[email protected]> >> > To: [email protected] >> > Date: 05/27/2016 05:36 AM >> > Subject: Sort PARSE, ABSPOS and SUBPOS. How to PARSE when >one or >> > more fields are missed. >> > Sent by: IBM Mainframe Discussion List ><[email protected]> >> > >> > >> > >> > Hi everybody, >> > >> > I'm trying to parse a variable record where some fields can and >cannot >> be >> > present. >> > >> > It seems, after the first search failure (pointer hit the end of >record) >> > there's no chance to restart the parsing from the beginning. >> > >> > This is a test: >> > >> > //SORTIN DD * >> > *F00:FIELD00*F01:FIELD01*F02:FIELD02* >> > *F01:FIELD01*F00:FIELD00*F02:FIELD02* >> > *F02:FIELD02*F00:FIELD00*F01:FIELD01* >> > *F00:FIELD00*F02:FIELD02* >> > *F00:FIELD00*F02:FIELD02*F01:FIELD01* >> > *F02:FIELD02*F01:FIELD01* >> > /* >> > //SORTOUT DD SYSOUT=* >> > //SYSIN DD * >> > INREC PARSE=(%00=(STARTAFT=C'F00:', >> > ENDBEFR=C'*', >> > FIXLEN=15), >> > %=(ABSPOS=1,FIXLEN=1), >> > %01=(SUBPOS=1000,STARTAFT=C'F01:', >> > ENDBEFR=C'*', >> > FIXLEN=15), >> > %=(ABSPOS=1,FIXLEN=1), >> > %02=(STARTAFT=C'F02:', >> > ENDBEFR=C'*', >> > FIXLEN=15)), >> > BUILD=(C'F00=',%00,C'-F01=',%01,C'-F02=',%02,C'-') >> > SORT FIELDS=COPY >> > /* >> > >> > The output is: >> > >> > F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> > >> > F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> > >> > F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> > >> > F00=FIELD00 -F01= -F02= - >> > >> > F00=FIELD00 -F01=FIELD01 -F02=FIELD02 - >> > >> > F00= -F01= -F02= - >> > >> > >> > I tried with: >> > >> > //SYSIN DD * >> > INREC PARSE=(%00=(STARTAFT=C'F00:', >> > ENDBEFR=C'*', >> > FIXLEN=15), >> > %01=(SUBPOS=1000,STARTAFT=C'F01:', >> > ENDBEFR=C'*', >> > FIXLEN=15), >> > %02=(SUBPOS=1000,STARTAFT=C'F02:', >> > ENDBEFR=C'*', >> > FIXLEN=15)), >> > BUILD=(C'F00=',%00,C'-F01=',%01,C'-F02=',%02,C'-') >> > SORT FIELDS=COPY >> > /* >> > >> > too with no difference. >> > >> > The behaviour is the same for DFSort and SyncSort. >> > >> > This does lead me to think I didn't fully understand the following >> manual >> > statement (from DFSort): >> > >> > "*ABSPOS=p* >> > Sets the Start Pointer for this parsed field to p. p can be 1 to >32752. >> By >> > default, the Start Pointer for the first %nn parsed field is >position 1 >> > for >> > fixed-length records or position 5 for variable-length records, and >the >> > Start >> > Pointer for each subsequent %nn parsed field is the Start Pointer >set by >> > the >> > previous %nn field. You can use ABSPOS=p to set the Start Pointer >to >> > position p to override the default Start Pointer. If the resulting >Start >> > Pointer >> > is less than position 5 for variable length records, it will be set >to >> > position >> > 5." >> > >> > and >> > >> > " *SUBPOS=y* >> > Decrements the Start Pointer for this parsed field by y. y can be 1 >to >> > 32752. >> > By default, the Start Pointer for the first %nn parsed field is >position >> 1 >> > for >> > fixed-length records or position 5 for variable-length records, and >the >> > Start >> > Pointer for each subsequent %nn parsed field is the Start Pointer >set by >> > the >> > previous %nn field. You can use SUBPOS=y to decrement the Start >Pointer >> > by x to override the default Start Pointer. If the resulting Start >> Pointer >> > is >> > less than position 1 for fixed-length records, it will be set to >> position >> > 1. If >> > the resulting Start Pointer is less than position 5 for >variable-length >> > records, it will be set to position 5." >> > >> > Thanks a lot for your support. >> > Massimo >> > >> > >---------------------------------------------------------------------- >> > For IBM-MAIN subscribe / signoff / archive access instructions, >> > send email to [email protected] with the message: INFO >IBM-MAIN >> > >> > >> > >> > >> > >> > >> > >---------------------------------------------------------------------- >> > For IBM-MAIN subscribe / signoff / archive access instructions, >> > send email to [email protected] with the message: INFO >IBM-MAIN >> > >> >> >---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, >> send email to [email protected] with the message: INFO >IBM-MAIN >> >> >> >> >> >> >> >---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, >> send email to [email protected] with the message: INFO >IBM-MAIN >> > >---------------------------------------------------------------------- >For IBM-MAIN subscribe / signoff / archive access instructions, >send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
