[ 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.