解析tcl中的字符串参数
我将参数传递给函数StcPortConfig,如下所示:解析tcl中的字符串参数,tcl,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,-
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\u frame\u rate(设置为30)的值。但当我阅读“mode”时,解析字符串有一个问题。打印语句给出“端口配置为”
当我阅读args时,其打印如下:
参数为m:1 fc:1暂停\u帧\u速率:30暂停\u值:\'FFFF\'模式:\'gen\'
我在试图解析字符串而不是整数/数字的参数时遗漏了一些东西 我没有使用mode:“gen”,而是将它改为mode:gen,它就可以工作了 您可以使用
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"
}
}
}
}
您可以将regexp更改为包含
\“
,这样就不会出现前一行的问题。