Hello Peter,
Thanks for sending your functions. I'm still sort of a newbie and I had to
get a programming friend give me a quick course in how functions work
(especially the local variables.)
Anyway, I ran a test using your functions against the offset() function in
LC
Searching 78 characters (the entire alphabet repeated 3 times) for all
possible 7-ltr words (32,856 is the result) we have:
your functions: 3045 milliseconds
offset(): 1249 milliseconds
But I'm going to file away your functions because I may use them later in
some other manner - and what I learned today about functions was very
helpful.
So thanks again.
Larry
P.S. I'm using LC 6.6.3 on Windows XP with 4gb of ram.
----- Original Message -----
From: "Peter M. Brigham" <pmb...@gmail.com>
To: "How to use LiveCode" <use-livecode@lists.runrev.com>
Sent: Friday, September 26, 2014 11:53 AM
Subject: Re: searching for chars within a string
I'm curious, Larry -- how fast is this on your machine compared to the
regex solutions?
function isInString testStr, targetStr
repeat for each char c in testStr
add 1 to countArray[c]
end repeat
put the keys of countArray into letterList
repeat for each line L in letterlist
put countArray[L] into nbrCharsTest
put howMany(c,targetStr,comma) into nbrCharsNeeded
if nbrCharsNeeded < nbrCharsTest then return false
end repeat
return true
end isInString
function howmany tg,container,divChar
-- how many tg = <target string> is in container
replace tg with divChar in container
set the itemdelimiter to divChar
put the number of items of container into h
if char -1 of container = divChar then return h
-- trailing delimiter is ignored
return h-1
end howmany
-- Peter
Peter M. Brigham
pmb...@gmail.com
http://home.comcast.net/~pmbrig
On Sep 26, 2014, at 11:58 AM, <la...@significantplanet.org>
<la...@significantplanet.org> wrote:
Hello Kay,
Good stuff.
I did some time tests and offset() is about twice as fast as matchText().
Don't know why.
Larry
----- Original Message ----- From: "Kay C Lan" <lan.kc.macm...@gmail.com>
To: "How to use LiveCode" <use-livecode@lists.runrev.com>
Sent: Friday, September 26, 2014 12:54 AM
Subject: Re: searching for chars within a string
A simple way would be just to use basic matchText() for each single
letter and regex matchText() for repeating letters. P.*P will find
double Ps, P.*P.*P will find triple Ps etc. Seems to be relatively
fast but if you have very large data sets other alternatives would
need to be investigated.
in the message box:
put "ABCDEKLP" into X
put "ABCDEKLLLLMMOOPP" into Y
put 100000 into Z
put 0 into a
put 0 into b
put 0 into c
put 0 into d
put the millisec into tStart
repeat Z times
if (matchText(X, "A") AND matchText(X, "E") AND matchText(X, "L") AND
matchText(X, "P.*P")) then
add 1 to a
else
add 1 to b
end if
if (matchText(Y, "A") AND matchText(Y, "E") AND matchText(Y, "L") AND
matchText(Y, "P.*P")) then
add 1 to c
else
add 1 to d
end if
end repeat
put the millisec into tEnd
put "X Passed " & a & " times." & cr into msg
put "X Failed " & b & " times." & cr after msg
put "Y Passed " & c & " times." & cr after msg
put "Y Failed " & d & " times." & cr after msg
put Z & " repeats took " & tEnd - tStart & " ms" after msg
The above should take less than 1 sec but for a million repeats I got:
X Passed 0 times.
X Failed 1000000 times.
Y Passed 1000000 times.
Y Failed 0 times.
1000000 repeats took 1997 ms
NOTE: the above only works if the letters you are looking for can
appear in ANY order. If you need a specific order then you'd have to
regex matchText() for all searches, ie
if (matchText(X, "A.*E.*L.*P") AND matchText(X,"P.*P")) then
Yes, the P must appear in both searches to ensure a P has both an L
before it and a P after it.
HTH
On Wed, Sep 24, 2014 at 8:22 AM, <la...@significantplanet.org> wrote:
Hello,
I have done a lot research and cannot find any way to do this:
I have a string, "AELPP" and I want to see if all 5 of those letters
are in "search string"
If search string is: ABCDEKLP, then NO it isn't because there are
two P's in the string I'm searching for.
But if search string is: ABCDEKLLLMMOOPP, then YES the string I'm
searching for is found in the search string.
It is important to my program that I just find the 5 chars anywhere
within the search string and they do not have to be sequential in the
search string.
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your
subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode