Custom sorting question
J. Landman Gay
jacque at hyperactivesw.com
Thu Apr 20 14:55:37 EDT 2006
Devin Asay wrote:
> I read the dictionary entry for 'sort container' carefully, and found a
> couple of sample scripts for similar things from old use-rev postings.
> This is what I came up with, but it didn't do what I want. I think it
> boils down to my not understanding how to create custom sort orders.
>
> local lCount,lSortOrder
>
> on updateList
> ## sort the rawLessonData by item 1 of each line, according to the
> term list
> put the rawLessonData of fld "vocablist" into tRawData
> put "59,26,110,111,272,314,149,250,54" into lSortOrder
> put 0 into lCount
> sort lines of tRawData by termOrderSort(each)
>
> -- do stuff with the sorted list
> end updateList
>
> function termOrderSort
> add 1 to lCount
> return item lCount of lSortOrder
> end termOrderSort
>
> Can anyone advise me?
The way it is now, termOrderSort is returning a number from the item
list (such as 259), and the lines will sort numerically using those
numbers. What you want is for "259" to be returned as "1" and "26" to be
returned as "2", etc. Then the sort works. So do this:
local lSortOrder -- this is the only local you need
on updateList
put the rawLessonData of fld "vocablist" into tRawData
put "259,26,110,111,272,314,149,250,54" into lSortOrder
sort lines of tRawData by termOrderSort(word 1 of each)
-- do stuff with the sorted list
end updateList
function termOrderSort tNum
return itemoffset(tNum, lSortOrder) -- this returns "1,2,3,4,5,etc"
end termOrderSort
Using "word 1 of each" sends the actual number in your raw data to the
sort function. The sort function gets the item offset of that number
from the sort order list. It returns that offset as an integer that will
force the data to sort in the proper order; that is, "259" becomes "1", etc.
--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode
mailing list