function rangeExtract nums local prevNum, znums, rangedNums set itemDelimiter to ", " put the first item of nums into prevNum repeat for each item n in nums if n is (prevNum + 1) then put n into prevNum put "#" & n after znums else put n into prevNum put return & n after znums end if end repeat set itemDelimiter to "#" repeat for each line z in znums if z is empty then next repeat switch the number of items of z case 1 put z & "," after rangedNums break case 2 put item 1 of z & "," & item -1 of z & "," after rangedNums break default put item 1 of z & "-" & item -1 of z & "," after rangedNums end switch end repeat return char 1 to -2 of rangedNums --strip off trailing comma end rangeExtract