Sri,
You are a Great Asset to everyone.
Thank You for your contributions!
Warm Regards,
Doug 

.

On May 27, 2016, at 15:38, 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

Reply via email to