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