How about this...

function sortAddresses pAddresses
   put empty into tOutput
   repeat for each line tAddress in pAddresses
          if word 1 of tAddress is in "NSEW" then
                put tAddress &cr after tOutput
          else
                put "~ "&tAddress &cr after tOutput
          end if
   end repeat
   delete last char of tOutput
   sort lines of tOutput by word 2 of each
   replace "~ " with empty in tOutput
   return tOutput
end sortAddresses

Terry...

On 11/05/2012, at 1:46 PM, Jim Hurley wrote:

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


Dr Terry Judd
Senior Lecturer in Medical Education
Medical Education Unit
Faculty of Medicine, Dentistry & Health Sciences
The University of Melbourne



_______________________________________________
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

Reply via email to