Du kan også lige få en version, som kan håndtere negative intervaller, samt stigende eller faldende intervaller. Jeg har vedhæftet nogle testscenarier som demonstrerer input og output:
function udpakTalraekke(strListe)
dim tmp, lenTmp, i, itm, splitpos, start, slut, res, idx
if len(strListe) = 0 then
udpakTalraekke = Array()
exit function
end if
tmp = split(strListe, ",")
lenTmp = ubound(tmp)
for i = 0 to lenTmp
itm = tmp(i)
splitpos = instr(2, itm, "-")
if splitpos > 0 then
start = clng(left(itm, splitpos-1))
slut = clng(mid(itm, splitpos+1))
res = ""
if start < slut then
for idx = start to slut
if len(res) > 0 then res = res & ","
res = res & idx
next
else
for idx = start to slut step -1
if len(res) > 0 then res = res & ","
res = res & idx
next
end if
' læg den kommaseparerede streng tilbage i arrayet
tmp(i) = res
end if
next
' saml arrayet til en streng for derefter at splitte den
' op til et array igen...
udpakTalraekke = split(join(tmp,","),",")
end function
sub testTalraekke(talliste)
Response.Write "[" & talliste & "] omsættes til ["
Response.Write Join(udpakTalraekke(talliste),",")
Response.Write "]<br/>"
end sub
call testTalraekke("1-20,25,28-32")
call testTalraekke("12,46,7,8,54,525345,1-4")
call testTalraekke("")
call testTalraekke("-1,-15,-20--25")
call testTalraekke("-150,-20-25,99")