Re: match() in depth!
- Posted by Kat <gertie at PELL.NET> Feb 24, 2002
- 400 views
On 25 Feb 2002, at 15:58, Derek Parnell wrote: > > Hi Kat, > > however the result of parse() is a nested sequence. Correct. > IOW this ==> {"this","is","a","test","of","match()"} is a sequence that > contains six other > sequences (aka strings). And match is actually looking for matching slices. > When > we are dealing with sequences that look like strings, we can easily think of > match as looking for substrings. But in Euphoria palance, a substring is just > a > slice of a sequence. Correct, which is the whole point of parsing, makes each word (token) a single slice, so word number 2 in sentence is same as sentence[2]. > If we use some symbolic representation of the test sequence above it could be > coded as : > > {TIAtOM} > > where I've simple replaced each word with a letter representing that word. > > Thus the find for "is" similarly coded is match({I}, test). This will return > 2. > The scan for the "s" word is coded match({S},test) and returns 0 because there > is no "s" word in the test sequence. You lost me there. You said match({I}, test), which i understand, but that is {I}, same as "I", which meets the specs for match() in the help files. I used {"I"}. > May I recommend trying to locate "is" word in a standard Euphoria sequence > string by doing : > > find (" is ", test) -- Note the spaces around the word. This might save you > parsing it too often. I know that works too, same thing about the {" "} though. But about parsing it too often, i parse the lines once, then each item is a slice, and i deparse before writing each out again. There is at least one change on each of 200,000+ lines, and some have dozens of changes. Kat > 25/02/2002 3:23:51 PM, Kat <gertie at PELL.NET> wrote: > > > > >On 25 Feb 2002, at 14:01, Derek Parnell wrote: > > > >> > >> Hi Kat, > >> I'm not quite sure what you are driving at either. > >> > >> When you run this code of yours, what do you get displayed? > >> > >> When I run it, it only reports that 'is' is found. And this is exactly what > >> I > >> would have expected. > >> > >> My assumption is that 'parse()' converts : > >> > >> "this is a test of match()" > >> > >> to: > >> > >> {"this","is","a","test","of","match()"} > > > >Correct. > > > >> In which case the match({"is"},test) call will return 2. Because "is" is > >> the > >> second element of the test sequence. > > > >> In which case the match({"s"},test) call will return 0. Because "s" is not > >> any of the elements in the test sequence. > >> > >> What did you find surprising with your test? > > > >I had never seen the match({"is"},test) in any code i have read in the > >archives. I have seen match("is",test). Frankly, the use of {} occasionally > >confuses me, and to put the "is" inside the { } told me it was a nested > >sequence, and should have returned nothing, zero, or an error,, because the > >help files say all the parms for match() are to be sequences, and a nested > >seq > >as the first parm barely makes sence. But i was looking for a way to get some > >code running faster, and tried it. > > > >Kat > > > > > >> ------ > >> Derek. > >> > >> > >> 25/02/2002 1:43:42 PM, Kat <gertie at PELL.NET> wrote: > >> > >> > > >> >On 24 Feb 2002, at 22:52, rforno at tutopia.com wrote: > >> > > >> >> > >> >> OK. But what is the strange thing about it? I don't understand. > >> > > >> >The {bracketed} and "quoted" parts in the examples below. > >> > > >> >Kat > >> > > >> > > >> >> ----- Original Message ----- > >> >> From: "Kat" <gertie at PELL.NET> > >> >> To: "EUforum" <EUforum at topica.com> > >> >> Sent: Sunday, February 24, 2002 12:49 AM > >> >> Subject: match() in depth! > >> >> > >> >> > >> >> > I didn't know we could do this! > >> >> > > >> >> > include strtok.e > >> >> > with trace > >> >> > sequence test > >> >> > > >> >> > test = "this is a test of match()" > >> >> > test = parse(test,32) > >> >> > > >> >> > > >> >> > if match({"is"},test) then > >> >> > puts(1,"found is\n") > >> >> > end if > >> >> > > >> >> > if match({"s"},test) then > >> >> > puts(1,"found s\n") > >> >> > end if > >> >> > > >> >> > trace(1) > >> >> > abort(0) > >> >> > > >> >> > > >> --------- > >> Cheers, > >> Derek Parnell > >> > >> > --------- > Cheers, > Derek Parnell <snip> > > >