TCL基本语法2
1、format和scan
两个基本的函数,和C语言中的sprintf和scanf的作用基本相同。format将不同类型的数据压缩在字符串中,scan将字符串中的数据提取出来。
set name Jack set age 100 set worker [format "%s is %d years old" $name $age] puts $worker scan $worker "%s is %d years old" name_scan age_scan puts $name_scan\ and\ $age_scan
基本上就是将变量组合然后分解的过程。
Jack is 100 years old Jack and 100
2、regexp
匹配字符指令,就是将待测的字符串与正则表达式匹配,完全符合返回1,否则为0,后置参数变量可以接收每层的配置好的结果。
puts [ regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} ab ] #匹配参数服从正则表达式,但是又有区别 #| ---------两项取其一即可 #(0x)? -----对前面项0x进行0次或1次匹配 #[0-9a-fA-F] ---0-9 和a-f的大小写都可出现 #+ -------对于前面的项1次或多次匹配 #^ -------从头开始匹配,头部不符合即失败 #$ -------从尾部匹配,尾部不符合即失败 regexp { ([0-9]+) *([a-z]+)} "there is 00100 apples" total num word puts $total\n$num\n$word #第一个变量是整个表达式的结果 #第二个参数是第一次层的子表达式 #第三个参数是第二层的子表达式 #所谓的子表达式,就是括号覆盖的地方 regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 0xab011cdf S1 S2 S3 puts $S1\n$S2\n$S3
1 00100 apples 00100 apples 0xab011cdf 0xab011cdf 0x
第一个是匹配十六进制及10进制的数,匹配成功,结果正常。
第二个是匹配数字加字符串,第一层是全匹配的,第二层前半部分是匹配数字的,第二层后半部分是匹配字符的。
第三个是匹配十六进制和十进制数的,第一层是前后匹配都正确的,第二层是匹配正确的,第三层是0x匹配的。
从第二个和第三个的区别可以看出,regexp后面的传递参数的层数是由括号决定的。{()()}的三个参数依次是大括号、左括号和右括号,{(())}则是外中内依次读取。
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:绿叶落秋风,专注FPGA技术分析和分享,转载请注明原文链接:https://www.cnblogs.com/electricdream/p/13436905.html,文中资源链接如下:
1. GITHUB开源仓库