Tcl中命令参数的解析

风行水上 @ 2012-11-26 11:10:51
标签:

    parse_args

    自己写的用来解析命令参数的proc。

    proc parse_args {argv {vname ""}} {
      upvar $vname opts
      set opts(%) [list]
      for {set i 0 ; set n [llength $argv] ; set cnt 0 ; set stop false} {$i<$n} {incr i} {
        set k [lindex $argv $i]
        if {!$stop && [regexp -- {^-\w+$} $k]} {
          if {[info exists opts($k)] && $opts($k)=="off"} {
            array set opts [list $k on]
          } else {
            set v [lindex $argv [incr i]] ; array set opts [list $k $v]
          }
        } elseif {$k == "--" } {
          set stop true
        } else {
          set stop true
          set v $k
          set k [format "%%%d" [incr cnt]]
          array set opts [list $k $v]
          lappend opts(%) $v
        }
      }
      return 1
    }
    
    ### Demo Usage ###
    
    proc t {args} {
      array set {} {
        -list  off
        -array off
        -size  0
      }
      parse_args $args
      puts [array get {}]
    }
    
    标签:

      分享到:
      comments powered by Disqus

      30/34ms