## Ways to compare two or more strings

Got a LiveCode personal license? Are you a beginner, hobbyist or educator that's new to LiveCode? This forum is the place to go for help getting started. Welcome!

Moderators: Klaus, FourthWorld, heatherlaine, kevinmiller

archer2009BUSknbj
Posts: 72
Joined: Sat Apr 06, 2013 8:09 am
Location: London

### Ways to compare two or more strings

is there a way to compare two strings to see how many words they have in common

for example

a="apples pears oranges"

b="apples sultanas strawberries pears"

so they have 2 things in common

is there a command that will let you know how many things are in common or a simple way to work it out?

sturgis
Livecode Opensource Backer
Posts: 1682
Joined: Sat Feb 28, 2009 11:49 pm

### Re: Ways to compare two or more strings

Since your lists are space separated, it should be easy to use word chunking to do the check.
Here is 1 way.

Code: Select all

``````put "apples pears oranges" into a -- would make sense to compare word length and use the shortest list to iterate through for speed purposes
-- in this case, just using the a list since I know its the shortest.

put "apples sultanas strawberries pears" into b

set the wholematches to true -- so that apple will not match apples.

-- go through each word contained in variable a.
repeat for each word tWord in a
-- if the word we're looking for (tword) is in variable b, the result of the function will be the location (word number) in b
-- where the word appears.  If its 0 there was no match.  If its > 0 there was a match so tack the found word on to the list
if wordoffset(tWord,b) > 0 then then put tWord & comma after tCommon
end repeat
-- get rid of the trailing comma
delete the last char of tCommon
put tCommon -- put the list of matches into the msg box.
``````

bn
VIP Livecode Opensource Backer
Posts: 3461
Joined: Sun Jan 07, 2007 9:12 pm
Location: Bochum, Germany

### Re: Ways to compare two or more strings

Hi Sturgis,

I know you like this stuff...

This gave me the opportunity to test the new LiveCode split command variant "as set"

Code: Select all

``````on mouseUp
put "apples sultanas strawberries pears" into tData1
put "apples pears oranges" into tData2
split tData1 by space as set -- needs LC 6.0 to work
split tData2 by space as set -- needs LC 6.0 to work
intersect tData1 with tData2
combine tData1 with space as set -- needs LC 6.0 to work
put tData1
end mouseUp``````
Kind regards
Bernd

sturgis
Livecode Opensource Backer
Posts: 1682
Joined: Sat Feb 28, 2009 11:49 pm

### Re: Ways to compare two or more strings

Hmm. It works with 5.5.4 too! An undocumented feature apparently. Going to try it with 5.5.1... Ok, 5.5.1 doesn't work, 5.5.2 does. Didn't bother to check 5.5.3. I like it when new stuff shows up! Thx for pointing me the right way, sure makes it easy to do the comparison.

bn
VIP Livecode Opensource Backer
Posts: 3461
Joined: Sun Jan 07, 2007 9:12 pm
Location: Bochum, Germany

### Re: Ways to compare two or more strings

I actually always wanted to try intersect....

here is the version that works with all versions of Livecode/Revolution

Code: Select all

``````on mouseUp
put "apples sultanas strawberries pears" into tData1
put "apples pears oranges" into tData2
repeat for each word aWord in tData1
add 1 to tArray1[aWord] -- here you also count the number of occurences of the word, not used here
end repeat
repeat for each word aWord in tData2
add 1 to tArray2[aWord] -- here you also count the number of occurences of the word, not used here
end repeat
intersect tArray1 with tArray2
put the keys of tArray1
end mouseUp``````
BTW I am not shure which version is faster, wordOffset is very very fast. Arrays always have an overhead.

Kind regards
Bernd

sturgis
Livecode Opensource Backer
Posts: 1682
Joined: Sat Feb 28, 2009 11:49 pm

### Re: Ways to compare two or more strings

Would need a much much bigger set to check before any speed differences would matter. Also, checked the 5.5.2 release notes, not a word about "as set" yet it is there. Not that i'm complaining.

There was also a discussion on the list about "skip lists," I wonder if/how split lists could be applied to a problem like this.

EDIT: Ok, so 5.5.3 works, 5.5.2 fails. It must be morning.