我将参数传递给函数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 \"模式:\"根\"
我在尝试解析字符串而不是整数/数字的参数时遗漏了一些东西。
答案 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并且它有效。