Sort of a problem

Jim Hurley jhurley0305 at sbcglobal.net
Thu May 10 23:46:19 EDT 2012


I have a list of streets:

Main St
Oak Ave
N Auburn
Kimberly Ct
S Rector Rd
Maple Ave
W Pine St
Fairmont Ave

I want to sort them, but ignoring the compass prefix (N E S W) to give:

N Auburn
Fairmont Ave
Kimberly Ct
Main St
Maple Ave
Oak Ave
W Pine St
S Rector Rd

The best I have come up with is performing a bubble sort where I have control of the first word.

That script is below. This works well enough for short lists, but not for longer lists.
It might be possible to speed it up with arrays, but that is not what I'm after right now.
I have seen some amazing things done with custom sorts in Live Code. I confess, I never understood them.

Is there a custom sort available in Live Code to do this kind of sort?

Thanks,
JIm Hurley

Here is the bubble sort:

on mouseUp
   put field 1 into tList
   put "N E S W" into tWordsToIgnore
   put the number of lines in tList into n
   repeat
      put true into noChange
      repeat with i = 1 to n-1
         put theFirstWord(line i of tList, tWordsToIgnore) into tFirst
         put  theFirstWord(line i + 1 of tList, tWordsToIgnore) into tSecond
   --Reverse sequencial pairs if out of order.
         if tFirst > tSecond then
            put line i  of tList into temp
            put line i + 1 of tList into line i of tList
            put temp into line i + 1 of tList
            put false into  noChange
         end if
      end repeat
      if the shiftKey is down then exit to top --Just in case
      if  noChange then exit repeat ---Keep it up until no change.
   end repeat
   put tList into field 2
end mouseUp

function theFirstWord temp, tIgnoreWords
   put word 1 of temp into tFIrstWord
   if tFirstWord is among the words of tIgnoreWords then
      return word 2 of temp
   else 
      return word 1 of temp
   end if
end theFirstWord



More information about the use-livecode mailing list