As an alternative to regexen, there is a package called PROC that does the 
subset of IKJPARSE needed for CLIST style parameters. There may be other such 
tools out there; if I knew of a decent search engine ...


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
David Crayford [dcrayf...@gmail.com]
Sent: Thursday, February 27, 2020 6:07 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Rexx parse using period as placeholder

OK. Let me change the requirements again ;) How about also handling
single quotes for a fully qualified data set.

Simple to do with a regex. Not so simple using REXX.

Syntax:

      INDSN(DSNAME(MEMBER))
      INDSN(DSNAME)
      INDSN('HLQ.DSNAME(MEMBER)')
      INDSN('HLQ.DSNAME')


On 2020-02-27 12:28 AM, Seymour J Metz wrote:
>> Great! How will that work if I don't have a member name?
> The code will tell me not to believe you when you write
>
> "Syntax:
>
>       INDSN(DSNAM(MEMBER))"
>
> Writing the code is the easy part; the hard part is getting the actual 
> requirements.
>
>
> --
> Shmuel (Seymour J.) Metz
> http://mason.gmu.edu/~smetz3
>
> ________________________________________
> From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
> David Crayford [dcrayf...@gmail.com]
> Sent: Wednesday, February 26, 2020 7:18 AM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: Rexx parse using period as placeholder
>
> Great! How will that work if I don't have a member name?
>
> INDSN(DSNAME)
>
>
> On 2020-02-26 8:11 PM, Seymour J Metz wrote:
>> When I'm testing a template I usually use variable names so it's easier to 
>> follow what's happening; feel free to change them to periods.
>>
>> trace i;parse var parm  kw '(' dsn '(' mem ')' ')'
>>       95 *-*           parse var parm  kw '(' dsn '(' mem ')' ')'
>>          >V>             "INDSN(DSNAME(MEMBER))"
>>          >L>             "("
>>          >>>             "("
>>          >>>             "INDSN"
>>          >L>             "("
>>          >>>             "("
>>          >>>             "DSNAME"
>>          >L>             ")"
>>          >>>             ")"
>>          >>>             "MEMBER"
>>          >L>             ")"
>>          >>>             ")"
>>       96 *-*           trace 'Off'                    /* Don't trace rexxtry.
>>    */
>>     ................................................ REXXTRY.CMD on OS/2
>> say dsn mem
>> DSNAME MEMBER
>>
>>
>>
>> --
>> Shmuel (Seymour J.) Metz
>> http://mason.gmu.edu/~smetz3
>>
>> ________________________________________
>> From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
>> David Crayford [dcrayf...@gmail.com]
>> Sent: Wednesday, February 26, 2020 7:01 AM
>> To: IBM-MAIN@LISTSERV.UA.EDU
>> Subject: Re: Rexx parse using period as placeholder
>>
>> I've got a REXX parse puzzle to solve and I would like suggestions on
>> how to solve it.
>>
>> Syntax:
>>
>>        INDSN(DSNAM(MEMBER))
>>
>>        The code is simple. It uses the parse instruction with a template.
>>
>>           parse var parm . '(' val ')'
>>
>>
>>          *-* parm = 'INDSN(DSNAME(MEMBER))'
>>          >L>   "INDSN(DSNAME(MEMBER))"
>>          *-* parse var parm . '(' val ')'
>>          >.>   "INDSN"
>>          >>>   "DSNAME(MEMBER"
>>
>> Unfortunately the value is truncated because "parse" has no way to
>> anchor to the end of the string.
>>
>> Using a regex this is very simple "\((.*)\)$"
>>
>> Most modern languages have PEG libraries (parsing expression grammers)
>> which are much more powerful that regex. They can be called recursively
>> and used to implement real parsers.
>>
>> Even a simple scripting like Lua (which runs on z/OS) has a library
>> which can be used to implement a C99 parser in 500 lines of code
>> https://secure-web.cisco.com/1-qpVukWY5CQ__uk-jb69c-vU9oQiHr0QYGSPlCeoZgyD2_0Vr7rZvCFOZMHJg7zk3VOksBvTUY8MLW1evN4UV9cNBh-pn9n-5F9_X82JabsK-ab5tZgKrsgKaJaEaxaxX5DQT-npVqFY2v_bsph_x8TPP0FtlXCodigNSekdfPE7jkgJNBmS59AWuMpG8X-Uk87HGTSjWom-rjWZ2cck7YmxwA8YD0v-eN-AL17ABCPz1J03MFZeG5DTXPPIQZDHjFYyC1zarF945-8oyYAd868yq1R6J7tuZO3LwSG-nXLyxFjuFhxAFLZjb5wzxr9ud0_gAOZpFtSdNUpsdux1AoWvZREOg5L4JMcfEVubG-1nO2eSTtdsuvL3IPGSGD4-HEKFuhCLSVZQb4nT1RtVUgxxwK-lTjuUgN8iE103myJE9v-kJevMwsdsZ3jGRYmT/https%3A%2F%2Fgithub.com%2Ftitan-lang%2Fc-parser%2Fblob%2Fmaster%2Fc99.lua.
>>
>>
>> On 2020-02-26 11:41 AM, Paul Gilmartin wrote:
>>> On 2020-02-24, at 13:43:52, Ambros, Thomas wrote:
>>>> A trivial item, but this surprised me.
>>>>
>>>> I wanted to parse out the string 'word3' using the period as a place 
>>>> holder.  The input could have a blank delimited string containing an 
>>>> embedded period before the one I wanted to parse out.  The Parse Var as 
>>>> coded didn't work.  ...
>>>>
>>>> myVar = 'word1 word2 9.12 word3.ext'
>>>> Parse Var myVar . . . myVal '.' .
>>>>        ...
>>>> Say 'myVal=' myVal
>>>>        ...
>>> The simple answer to the elliptically stated problem is:
>>>        MyVal = 'word3'
>>>
>>> A more general solution, using regex is:
>>> 556 $ echo 'word1 word2 9.12 word3.ext' | sed 's/.* \([^.]*\).*/\1/'
>>> word3
>>> 557 $
>>> This finds the last substring in the subject preceded by a space
>>> and followed by a period.
>>>
>>> Full disclosure, for Tony to gloat:
>>> o It's easier to code than to review.
>>> o I got it right on the third try.
>>> o I haven't fuzz tested.
>>>
>>> -- gil
>>>
>>> ----------------------------------------------------------------------
>>> For IBM-MAIN subscribe / signoff / archive access instructions,
>>> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>> ----------------------------------------------------------------------
>> For IBM-MAIN subscribe / signoff / archive access instructions,
>> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>>
>> ----------------------------------------------------------------------
>> For IBM-MAIN subscribe / signoff / archive access instructions,
>> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to