$sortvar
Posted by CrashB
Friday, May 14, 2004
Description: sorts a var according to numiercal order

;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!
Submit a comment
Oops! You need to login or register before you can post a comment!

ebaum's world