How best to check if string contains any of a list of substrings?

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How best to check if string contains any of a list of substrings?

Geoff Canyon via use-livecode
Folks,
What is the most efficient way to test whether a variable containing a string such as “my test phrase” contains one of several variable substrings, such as “est” OR “phr” OR... ?

So far I’ve tried (without luck) approaches that simplify into...

put “my test phrase” into myTestPhrase
put “*est*” & cr & “*phr*” into tSubstrings

if myTestPhrase is among the lines of tSubstrings then answer “true”

repeat for each line L in tSubstrings
        if myTestPhrase contains L then answer “true”
end repeat

Both seem to be failing - do I have the wrong syntax or approach to the problem?

TIA
Keith
_______________________________________________
use-livecode mailing list
[hidden email]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
Reply | Threaded
Open this post in threaded view
|

Re: How best to check if string contains any of a list of substrings?

Geoff Canyon via use-livecode
Hi Keith,

I think the simplest method would be (almost) your second attempt below.
However, you were using "*est*" - i.e. with the '*'s before and after
the phrase, which is what you would need for 'filter' but not for
'contains'. So it should work with just

> put “my test phrase” into myTestPhrase
> put “est” & cr & “phr” into tSubstrings
>
> repeat for each line L in tSubstrings
> if myTestPhrase contains L then answer “true”
> end repeat
There's almost certainly also a way of doing it in a single pass using
regex - but I'm not brave enough to go there :-)

Are you expecting reallylarge strings to search ?  Or really many
phrases to search for ?

"beware optimizing something that is just plain fast enough already"

Alex.

On 01/11/2018 09:41, Keith Clarke via use-livecode wrote:

> Folks,
> What is the most efficient way to test whether a variable containing a string such as “my test phrase” contains one of several variable substrings, such as “est” OR “phr” OR... ?
>
> So far I’ve tried (without luck) approaches that simplify into...
>
> put “my test phrase” into myTestPhrase
> put “*est*” & cr & “*phr*” into tSubstrings
>
> if myTestPhrase is among the lines of tSubstrings then answer “true”
>
> repeat for each line L in tSubstrings
> if myTestPhrase contains L then answer “true”
> end repeat
>
> Both seem to be failing - do I have the wrong syntax or approach to the problem?
>
> TIA
> Keith
> _______________________________________________
> use-livecode mailing list
> [hidden email]
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
[hidden email]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
Reply | Threaded
Open this post in threaded view
|

Re: How best to check if string contains any of a list of substrings?

Geoff Canyon via use-livecode
Thanks Alex - I thought the single-pass ‘is among’ with wildcards was a long-shot, so I’ll concentrate on debugging the list iteration using the ‘contains’ check. :-)

The strings & sub-strings are simple - I have a large list of URLs that need to be processed differently (or ignored), based on various sub-string ’signatures’ that route them into different ‘buckets’ in an array.

The ’signatures’ vary - hence my use of a list variable (derived from a field) rather than hard-coding the plain text as literals.

BTW Good spot on the asterisk wildcard characters in the contains example below. This is just a typo in the email - they’re not (among the numerous bugs!) in the real code. :-)

Thanks again for the steer.
Best,
Keith

> On 1 Nov 2018, at 10:34, Alex Tweedly via use-livecode <[hidden email]> wrote:
>
> Hi Keith,
>
> I think the simplest method would be (almost) your second attempt below. However, you were using "*est*" - i.e. with the '*'s before and after the phrase, which is what you would need for 'filter' but not for 'contains'. So it should work with just
>
>> put “my test phrase” into myTestPhrase
>> put “est” & cr & “phr” into tSubstrings
>>
>> repeat for each line L in tSubstrings
>> if myTestPhrase contains L then answer “true”
>> end repeat
> There's almost certainly also a way of doing it in a single pass using regex - but I'm not brave enough to go there :-)
>
> Are you expecting reallylarge strings to search ?  Or really many phrases to search for ?
>
> "beware optimizing something that is just plain fast enough already"
>
> Alex.
>
> On 01/11/2018 09:41, Keith Clarke via use-livecode wrote:
>> Folks,
>> What is the most efficient way to test whether a variable containing a string such as “my test phrase” contains one of several variable substrings, such as “est” OR “phr” OR... ?
>>
>> So far I’ve tried (without luck) approaches that simplify into...
>>
>> put “my test phrase” into myTestPhrase
>> put “*est*” & cr & “*phr*” into tSubstrings
>>
>> if myTestPhrase is among the lines of tSubstrings then answer “true”
>>
>> repeat for each line L in tSubstrings
>> if myTestPhrase contains L then answer “true”
>> end repeat
>>
>> Both seem to be failing - do I have the wrong syntax or approach to the problem?
>>
>> TIA
>> Keith
>> _______________________________________________
>> use-livecode mailing list
>> [hidden email]
>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>
>
> _______________________________________________
> use-livecode mailing list
> [hidden email]
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
[hidden email]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode