Tcl学习记录

1、Tcl替换操作

1.1 三种替换方式

变量替换$,命令替换[],反斜杠替换\

1.1.1 变量替换$

set a 1;
set b $a;
结果为a=1,b=1
同时,若变量替换碰到非字母、数字下划线就会停止替换
set a 22
set a~ 11
set b $a~
此处结果 22,虽然这里的a值为11,但是在$转换的时候,由于到~就停止了,所以依旧输出的是a的值
set b ${a~}
此处结果为 11,输出的结果为 a~的值,若碰到这种情况,用上{}

1.1.2 命令替换[]

set a [expr 1+2]
将表达式(expr) 1+2的结果给a
file delete {*}[glob *v]
file delete 为tcl自带函数,这里实现的是删除.v文件

1.1.3 反斜杠替换\(代表转义字符)

set a "\$"
将a设置成为 $ 号

2、 tcl的引用

其意义在于阻止解析器对$和分好等特殊字符进行的特殊处理,这些方法称其为引用。包含 / "" {}

2.1 /引用

需要特殊注意的是在 tcl命令过长想利用换行操作的时候可以利用 \ 阻止解析器对换行符进行解析,但是\后千万不能有空格
xxxxx-code-xxxxxx \(手贱加了个空格)
xxxxx-code-xxxxxx
这是错误的
xxxxx-code-xxxxxx \(手不贱,没有加空格,即 \后就是换行符)
xxxxx-code-xxxxxx
这是正确的

2.2 " "引用和{}引用

" "引用为弱引用:他只是去掉单词和命令分隔符在""的内部解释(自己有点不理解)
{ }引用为强引用:在里面的所有字符全部直接输出,即所见即所得

3、三种匹配方式

exact glob 正则表达式

3.1 exact 匹配

严格匹配,完全一样才可以匹配
"hello world"——————"hello world" 利用exact命令只有这样才能匹配
"hello*"———"hello world" 利用exact命令这样就匹配不了

3.2 glob 匹配

符号 意义
匹配任意单个字符
* 匹配无现场的任意字符,包括空字符串
[char] 匹配chars中给出的任意字符,其中可以使用A-Z这样的形式
\x 匹配单个字符x,可以用于指定会被特殊处理的字符,如*?[]\

3.3 正则表达式匹配

符号 意义
. 匹配任意字符
^ 匹配开头
$ 匹配结尾
\x 匹配字符x,如*匹配星号
[chars] 匹配包含chars中任意字符
[^chars] 匹配除chars的字符
(regexp) 将括号里面的regexp作为一个匹配项进行匹配,如(abc)就匹配abc
* 对前面项匹配0次以上
+ 对前面项匹配1次以上
+ 对?前面的项匹配0次或者一次,如(abc)?匹配带有0个或者1个abc的字符串
regexp1|regexp2 匹配regexp1和regexp2的任意一项,如a|b匹配a或者b

4、变量

需要注意的点
1.tcl中变量无需定义,用set创建,unset移除
2.用 $ 进行调用
3.区分大小写
4.建议用数字、字母、下划线;同时开头用字母
5.常用变量类型: string ; list ; directionary 新思还有专门的collection
6.变量存储类型:字符串表达形式;内部表达形式(整数,实数,名称,列表,tcl脚本)

4.1 string 命令

string命令1 结果 注释
string match ?-nocase? Pattern string *** string匹配命令
string match i ICXiaoMiDi2020 1
string match 1 这里必须用上{}表示他们是一个整体
string match -nocase 1 这里的nocase表示不区分大小写

string命令2 结果 注释
string equal ?-nocase? ?-length int? string1 string2 *** string equal命令,严格相等返回1,否则返回0
string equal -nocase -length 3 Myi456afsd myifasdfa54 1 不区分大小写,看前三个字符是否严格相等


string命令3 结果 注释
string compare ?-nocase? ?-length int? string1 string2 *** string 比较命令,严格相同返回0,不同处string1先于string2 返回-1,反之返回1
string compare Tyz2021 Tyz2021 0 严格相等
string compare Tyz2020 Tyz2021 -1 2020先于2021
string compare Tyz2021 Tyz2020 1 2020后于2021

string命令4 结果 注释
string length string0 *** 计算字符串长度
string length 123456 6 计算长度

string命令5 结果 注释
string index string0 charIndex *** 返回string中第charIndex个字符
string index TyzBlog 2 z 索引从0开始,输出字符串中第2个字符

string命令6 结果 注释
string range string first last *** 返回字符串中一个区间的字符
string range TyzBlog 0 2 Tyz 输出索引0到2之间的字符

string命令7 结果 注释
string replace first last ?newstring? *** 用newstring替换两个索引之间的字符
string replace TyzNice end-3 end Good TyzGood 用good替换nice

string命令8 结果 注释
string map ?-nocase? mapping string *** 将mapping中的映射关系应用到string中,字字符串中
string map {T t 20 21 25 26} Tyz202025 tyz212126 按照对应关系进行替换

string命令9 结果 注释
string trim string ?chars? *** 从两侧对chars包含的字符进行裁剪
string trim icgoodcoolTyz icz goodcoolTy 对两侧的icz的字符进行裁剪

string命令10 结果 注释
string trimleft string ?chars? *** 从开头对chars包含的字符进行裁剪
string trimleft icgoodcoolTyz icz goodcoolTyz 对开头的icz的字符进行裁剪
string命令11 结果 注释
string trimright string ?chars? *** 从结尾对chars包含的字符进行裁剪
string trimright icgoodcoolTyz icz icgoodcoolTy 对结尾的icz的字符进行裁剪
tips:这几个裁剪命令主要用于删除字符中的空格,很有帮助

string命令12 结果 注释
string tolower string ?first? ?last? *** 将范围内字符转成小写
string tolupper string ?first? ?last? *** 将范围内字符转成大写

string命令13 结果 注释
string repeat string count *** 重复string count次

string命令14 结果 注释
string reverse string *** 字符调转

4.2、 变量值list

创建list的三种方法

1、 set list_a "fio0 fio1 fio2"
2、 set list_a {fio0 fio1 fio2}
3、 set list_a [list fio0 fio1 fio2] 注意这里的list不是元素,[]整个是一个[]替换


list命令1 注释
llength list 返回列表长度

list命令2 注释
lindex list count 访问列表元素

list命令3 注释
linsert list 1 ?value? 在列表中相应位置插入值

list命令4 注释
lreplace list first last ?value value...? 在范围内替换

list命令5 注释
concat ?list list? 列表拼接

list命令6 注释
lappend list value 列表元素添加,注意这里没有$号

list命令7 注释
lrepeat number value ?value? 重复number次value

list命令8 注释
lassign list varName ?value? 依次将列表中的值取出并进行赋值给value

list命令9 注释
join list ?joinstring? 将joinstring作为分隔符,将列表元素串联起来,通常用于将list 转化为 string

list命令10 注释
split string ?splitChars? 将string 用splitChars进行分隔开来

list命令11 注释
lsearch ?option ...? list pattern **搜索列表中的元素 **

4.2、 变量值array

暂未仔细研究

5、表达式

5.1 expr 命令

6、流控制

5.1 流控制 if


这里需要注意的是,大括号左需要和条件在一行,否则解析器看到换行符就以为结束了,会造成错误
此外需要注意的是 大括号和if elseif之间一定要有空格,因为解析器是以空格来解析的

5.2 流控制 while

5.3 流控制 foreach

5.4 流控制 switch

posted @ 2021-11-21 20:15  就很胖  阅读(309)  评论(0编辑  收藏  举报