$sortvar
Posted by CrashB
Friday, May 14, 2004
Description: sorts a var according to numiercal order
Enjoy!
;usage: $sortvar(%variable) or $sortvar(itemA:num itemB:num itemC:num)
;example: $sortvar(a:3 b:41 c:77 d:61 e:67 f:16 g:33 h:85 i:18 j:69)
;returns: h:85 c:77 j:69 e:67 d:61 b:41 g:33 i:18 f:16 a:3
alias sortvar {
var %var $1-
var %tokens $numtok([ %var ],32)
var %newvar $null
var %i 1
while %i <= %tokens {
var %data $gettok([ %var ],[ %i ],32)
var %item $gettok([ %data ],1,58)
var %value $gettok([ %data ],2,58)
if $numtok([ %newvar ],32) == 0 { var %newvar %data }
else {
var %d 0
var %t 1
while (%t <= $numtok([ %newvar ],32)) && (%d == 0) {
var %tok $calc(%t - 1)
if %tok <= 1 { var %tok 1 }
else { var %tok 1- $+ %tok }
var %tok2 $calc(%t + 1) $+ -
if %t == 1 {
var %tmp.data1 $null
var %tmp.data2 $gettok([ %newvar ],2-,32)
var %tmp.data $gettok([ %newvar ],1,32)
}
else {
var %tmp.data1 $gettok([ %newvar ],[ %tok ],32)
var %tmp.data2 $gettok([ %newvar ],[ %tok2 ],32)
var %tmp.data $gettok([ %newvar ],[ %t ],32)
}
var %tmp.item $gettok([ %tmp.data ],1,58)
var %tmp.value $gettok([ %tmp.data ],2,58)
if %value > %tmp.value {
if %t == 1 { var %newvar %data %newvar }
else {
if %tmp.data1 != $null { var %newvar %tmp.data1 %data %tmp.data %tmp.data2 }
else { var %newvar %data %tmp.data %tmp.data2 }
}
var %d 1
}
inc %t
}
if %d == 0 { var %newvar %newvar %data }
}
inc %i
}
return %newvar
}Enjoy!