欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tcl语言cmdline包 TclF#

程序员文章站 2022-07-03 20:25:59
...

Cmdline包主要用来处理命令行输入。

  • getopt argvVar optstring optVar valVar
    getopt与C语言中的getopt函数类似,如果成功取出命令行参数返回1,如果所有的命令行参数已经取完返回0,发生错误返回-1。argvVar是包含了参数的字符串,一般就是argv,optstring说明了参数选项,如果参数后还有值需要输入,例如“-f abc”这样的形式,这个时候参数选项需要以“.arg”结尾。valVar说明了取到的参数值的存储,如果以“.arg”返回实际取到的参数的值,否则返回1。
  •  getKnownOpt argvVar optstring optVar valVar
    和getopt类似,但是忽略所有不认识的选项。
  •  getoptions arglistVar optlist  ? usage ?
    和getopt类似,只是一次调用就取回所有的选项。
  •  getKnownOptions arglistVar optlist  ? usage ?
    和getKnownOpt类似,只是一次调用就取回所有的选项。 

例子1:
#!/usr/local/bin/tclsh

package require cmdline

set flag_a 0
set flag_b 0
set value_r 0
set value_t ""

set usage "Usage:
                -a              set flag a
                -b              set flag b
                -r value        set flag r
                -t value        set flag t"


while {[set ok [cmdline::getopt argv {a b r.arg t.arg} opt val]] > 0} {
    switch -exact -- $opt {
        a       {set flag_a 1}
        b       {set flag_b 1}
        r       {set value_r $val}
        t       {set value_t $val}
    }
}

if { $flag_a == 1 } {
        puts "===Option a is set!==="
}
if { $flag_b == 1 } {
        puts "===Option b is set!==="
}
if { $value_r != 0 } {
        puts "===Option r is set, the value is $value_r==="
}
if { $value_t != "" } {
        puts "===Option t is set, the value is $value_t==="
}
if { $flag_a == 0 && $flag_b == 0 && $value_r == 0 && $value_t == "" } {
        puts stderr $usage
}

例子2:

#!/usr/local/bin/tclsh

package require cmdline

set options {
        {a          "This is option a!"}
        {b          "This is option b!"}
        {r.arg  ""  "This is option r, it should be r value"}
        {t.arg  -1  "This is option t, the default value is -1"}
}

set err_msg "Usage:
                -a              This is option a
                -b              This is option b
                -r value        This is option r, it should be r value
                -t valua        This is option t, the default value is -1"


array set params [cmdline::getoptions argv $options $err_msg]

set flag 0

if { $params(a) } {
        puts "===The option a is set=="
        set flag 1
}
if { $params(b) } {
        puts "===The option b is set=="
        set flag 1
}
set has_t [expr {$params(t) != -1}]
if { $has_t } {
        puts "===The option t is set==="
        puts "===$params(t)==="
        set flag 1
}
set has_r [expr {[string length $params(r)] > 0}]
if { $has_r } {
        puts "===The option r is set==="
        puts "===$params(r)==="
        set flag 1
}
if { $flag == 0 } {
        puts stderr $err_msg
}

相关标签: Tcl F#