> 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 [[email protected]] on behalf of
David Crayford [[email protected]]
Sent: Wednesday, February 26, 2020 7:18 AM
To: [email protected]
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 [[email protected]] on behalf of
> David Crayford [[email protected]]
> Sent: Wednesday, February 26, 2020 7:01 AM
> To: [email protected]
> 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 [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