[ Home Page | AppleScript | HyperCard | Misc. ]
Here are a number of HyperTalk examples that may prove useful. Suggestions, comments or improvements welcomed!
The material contained here is offered AS IS. I make NO REPRESENTATION OR WARRANTY, express or implied, nor does any other contributor to this site. WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. Consequential and incidental damages are expressly excluded. Your actual damages are limited in any event to the price charged for this material.
HyperCard's 'sum' command is good at summing lists of comma-delimited
numbers (i.e. sum (1,2,3)), but unable to sum numbers that
are separated by other delimiters (i.e sum("1" & tab
& "2" & tab &"3")). Here's a more
generic version that uses the itemDelimiter property to let you specify
how your number list is separated:
function delimitedSum theList, listDelimiter
put the itemDelimiter into storedDelim -- save itemDelimiter for restore
if listDelim is empty then put comma into listDelimiter -- like 'sum'
else set the itemDelimiter to char 1 of value(listDelimiter) -- UNlike 'sum'
put 0 into sumOfItems
repeat with i = 1 to number of items in theList
add value(item i of theList) to sumOfItems -- try to convert to a number
end repeat
set the itemDelimiter to storedDelim -- restore itemDelimiter
return sumOfItems
end delimitedSum
on mouseUp -- some examples of using sumList
answer delimitedSum("1,2,3") -- assumes comma separated numbers, like "sum"
answer delimitedSum("1"&tab&"2"&tab&"3",tab) -- for number list separated by tabs
end mouseUp
Note that this custom function is about twenty times slower than the built-in 'sum' function so for user sanity it's probably best used for lists of less than 200 items... Also getting the value of each item slows it down by about half but is needed to ensure consistency with the normal 'sum' command because sum treats "two" as a number, not a string. Perhaps I'll turn it into a XFCN some day.