You brought a lot to the table. Test code is nice ti have and I thank you for it.
I was thinking Peter’s would be faster and I wanted to use it. I got it working in a new stack with the code the others wrote and saved it all. They akk work in the new stack but don’t work properly in the stack that need it for. The script has a few repeats in it and where I need it is about as deep as you can get. I have found when you get real deep in repeats certain things don; work. Like if you compound your script into a single line which is good if it is deep in a repeat the engine can’t understand the complex script. thanks again! John Balgenorth On Aug 24, 2014, at 8:09 PM, Kay C Lan <[email protected]> wrote: > Not bringing much to the table other than to say that if you are > looking into large amounts of data, and need to do this millions of > time, and therefore speed is of interest, Peter's grep solution is > ever so slightly faster than Colin's. There isn't much in it and both > scale well. If you'd like to test, create a new stack, one button and > in the btn copy the below script which is one mouseUp handler and one > Function fRandomInRange. > > The script will ask you how long you want your test string to be and > how many times to you want to repeat the search. The default values of > a string 100 chars long searched a million times (repeated 4 times) > takes just over a second so don't be worried about starting with the > default values. The search is repeated 4 times, 1st it does Colin's > search, then it does Peter's search and just in case there is some > kind of advantage/disadvantage regarding being first, I do Peter's > search again and end off with Colin's. > > When run the message box should end up with something like this: > > For a random string of 100 chars long. > Searched 1000000 times. > Colin's 1st run: 362 ms > Peter's 1st run: 349 ms > Output Identical > Peter's 2nd run: 351 ms > Output Identical > Colin's 2nd run: 356 ms > Output Identical > > BE MINDFUL OF LINE WRAPS > > on mouseUp > ask "How many characters do you want in your random string" with > 100 titled "Enter a Number" > put it - 3 into tAnswer > put "For a random string of " & tAnswer + 3 & " chars long." & cr into msg > repeat tAnswer times > --generates a number between 32 & 90 and turns it into an ASCII char > put numToChar(fRandomInRange(32,90)) after tData > end repeat > --so we know that the data contains the string to be found > put "ABC" after tData > put "ABC" into tFind > ask "How many times do you want to repeat the search" with 1000000 > titled "Enter a Number" > put it into tAnswer > put "Searched " & tAnswer & " times." & cr after msg > put the millisec into tStart > --Colin's 1st > repeat tAnswer times > put offset(tFind,tSearch) into tOffset > if (tOffset = the number of chars in tSearch - the number of > chars in tFine + 1) then > put char 1 to tOffset - 1 of tSearch into tFound > put tFound into tColin1st > end if > end repeat > put the millisec into tEnd > put "Colin's 1st run: " & tEnd - tStart & " ms" & cr after msg > put the millisec into tStart > --Peter's 1st run > repeat tAnswer times > if (matchText(tSearch,"(.*)" & tFind & "$",tFound)) then > put tFound into tPeter1st > end if > end repeat > put the millisec into tEnd > put "Peter's 1st run: " & tEnd - tStart & " ms" & cr after msg > if (tColin1st = tPeter1st) then > put "Output Identical" & cr after msg > else > put "ERROR!" & cr after msg > end if > put the millisec into tStart > --Peter's Again > repeat tAnswer times > if (matchText(tSearch,"(.*)" & tFind & "$",tFound)) then > put tFound into tPeter2nd > end if > end repeat > put the millisec into tEnd > put "Peter's 2nd run: " & tEnd - tStart & " ms" & cr after msg > if (tPeter2nd = tPeter1st) then > put "Output Identical" & cr after msg > else > put "ERROR!" & cr after msg > end if > put the millisec into tStart > --Colin's 2nd run > repeat tAnswer times > put offset(tFind,tSearch) into tOffset > if (tOffset = the number of chars in tSearch - the number of > chars in tFine + 1) then > put char 1 to tOffset - 1 of tSearch into tFound > put tFound into tColin2nd > end if > end repeat > put the millisec into tEnd > put "Colin's 2nd run: " & tEnd - tStart & " ms" & cr after msg > if (tPeter2nd = tColin2nd) then > put "Output Identical" after msg > else > put "ERROR!" after msg > end if > end mouseUp > > > > FUNCTION fRandomInRange pLower, pUpper > return random(pUpper - pLower + 1) + pLower -1 > end fRandomInRange > > _______________________________________________ > use-livecode mailing list > [email protected] > Please visit this url to subscribe, unsubscribe and manage your subscription > preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode > _______________________________________________ use-livecode mailing list [email protected] Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode
