Sorting a list
The withoutLeadingArticle function
This custom function is called with a statement such as the following:
sort lines of field "Titles" by withoutLeadingArticle(each)
The custom function works in tandem with the sort container
command. When you sort the lines of a container, the each
keyword serves as a placeholder for each line in the container. In the above statement, each line is passed to the withoutLeadingArticle function, and the returned value is used as the sort key for that line. The withoutLeadingArticle function simply removes any leading articles (the words "A", "An", and "The"), leaving the rest of the title to be used as the sort key.
Using a custom function with the each
keyword makes the sort container command much more flexible, because you can use the custom function to create any custom sort criteria you want to use. You can eliminate certain parts of the lines being sorted from consideration, as we've done here. Or you can use another custom function to transform lines in other ways.
For example, you could write a custom function for international sorting, which would change accented characters like é or ü into their ASCII equivalents (e and u). A sort done with this custom function would sort accented characters as though they were the unaccented equivalents, instead of sorting all accented characters after the end of the unaccented alphabet.
The withoutLeadingArticle function code
function withoutLeadingArticle pText
get word 1 of pText
if it is "The" or it is "An" or it is "A" then
## we don't want to use it for the sort
delete word 1 of pText
end if
return pText
end withoutLeadingArticle
Other examples
Many other such special-purpose sorting functions can be written. Here's another example, which transforms a wordy movie rating into a letter so the movies can be easily sorted by rating, from best to worst:
function letterGrade pRating
switch pRating
case "See early, see often!"
return "A"
break
case "Worth the ticket price"
return "B"
break
case "Wait for the video release"
return "C"
break
case "Skip it."
return "D"
break
case "Flee! Flee for your lives!"
return "E"
break
end switch
end letterGrade
If a list of movies has the movie rating as the last item of each line, you can sort the movies by their ratings using this statement:
sort lines of tMovies by letterGrade(last item of each)
0 Comments
Add your comment