本文转载自: FPGA打工人微信公众号
tcl脚本实际上就是和字符串打交道,所以和字符串相关的命令比较牛逼一点,常见的有string、format、regexp、regsub、scan等。
format命令:
format formatstring ?vlue value...?
和ANSIC中的sprintf函数相似,可以指定数据的类型,小数点的位数等等,比如:
set name yshi
set age 26
set msg [format “%s is %d years old” $name %age]
scan命令:
scan string format varName ?varName ...?
与format命令相反,类似于ANSIC中的sscanf函数,其返回值是匹配的变量个数。比如:
scan "some 26 34" "some %d %d" a b
regexp命令:
regexp ?switchs? ?--? exp string ?matchVar?\ ?subMatchVar subMatchVar...?
该命令用于判断正则表达式exp是否全部或者部分匹配字符串string,匹配返回1,否则为0。至于正则表达式后面详细说明。如果regexp命令后面有参数matchVar和subMatchVar,则匹配整个正则表达式的子字符串赋值给第一个变量,最左边的赋值给第二个变量,依次类推。比如:
regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word
最后得到:total的值为100 apples,num的值为 100,word的值为 apples。该命令也可以设置switchs控制匹配结果:
regsub命令:
regsub ?switchs? exp string subSpec varname
也是和正则表达式打交道,将exp和string进行匹配,并将string赋值给变量varname,如果未指定varname则返回string,同时匹配exp的字符串会被subSpec替换。比如:
regsub there "They live there lives " their x
puts $x
得到 They live their lives
下面是regsub的switchs
string命令:
string option arg ?arg...?
该命令应该是最强大的操作字符串的命令,光option多达20多个。具体可参考:https://blog.csdn.net/asty9000/article/details/90681912