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 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