解析tcl中的字符串参数

时间:2017-02-28 11:04:38

标签: tcl

我将参数传递给函数StcPortConfig,如下所示:

 STC::StcPortConfig m:$port_b fc:1 pause_frame_rate:30 pause_val:"FFFF" mode:"gen";

在StcPortconfig函数中,我需要解析我正在做的不同参数值,如下所示:

 proc ::STC::StcPortConfig {args} {

  foreach arg $args {
    regexp {([A-Za-z0-9_-]+):([a-z0-9,-_ ]*)} $arg match cmd value

 if {$cmd == "pause_frame_rate"} {
    set pause_frame_rate $value
    set pause_frame 1
  }
 if {$cmd == "mode"} {
    set mode $value
    puts "\nport is configured as $mode\n"
  }
}

我能够读取pause_frame_rate的值(设置为30)。但是在我阅读"模式"时解析字符串存在问题。 print语句给出" port配置为"。

当我阅读args时,它的打印如下:       args是m:1 fc:1 pause_frame_rate:30 pause_val:\" FFFF \"模式:\"根\"

我在尝试解析字符串而不是整数/数字的参数时遗漏了一些东西。

2 个答案:

答案 0 :(得分:1)

您可以使用string trim删除引号。另一种实现方式:

proc ::STC::StcPortConfig {args} {
    foreach arg $args {
        regexp {([\w-]+):(.*)} $arg -> cmd value
        set value [string trim $value {"}]   ; # remove double quotes
        switch -exact -- $cmd {
            pause_frame_rate {
                set pause_frame_rate $value
                set pause_frame 1
            }
            mode {
                set mode $value
                puts "\nport is configured as $mode\n"
            }
        }
    }
}

答案 1 :(得分:0)

而不是做模式:“gen”,我将其改为模式:gen并且它有效。