赞
踩
unset这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素。
%unset a b day(monday)
append命令把文本加到一个变量的后面
%set txt hello %append txt "!How are you"
//Hello hello!How are you
incr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。
%set b 2;incr b 3 //结果为5
TCL支持常用的数学函数,表达式中数学函数的写法类似于C\C++语言的写法,数学函数的参数可以是任意表达式,多个参数之间用逗号隔开。
%set x 2 %expr 2*sin($x<3)
2 //1.68294196962
其中expr是TCL的一个命令,语法为:expr arg? arg...?
两个?之间的参数表示可省,后面介绍命令时对于可省参数都使用这种表示形式。
需要注意的一点是,数学函数并不是命令,只在表达式中出现才有意义,即出现在expr之后才有意义。
list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。
{} //空list {abcd} {a{bc}d} //list可以嵌套
语法:list?value value…?这个命令生成一个list,list的元素就是所有的value。
%list 1 2 {3 4} //1 2 {3 4}
//语法:concat list?list...?//整合两个list
%concat {1 2 3} {4 5 6} {1 2 3 4 5 6}
//语法:lindex list index //返回list的第index个元素
%lindex{1 2 {3 4}} 2 3 4
//语法:llength list/返回list的元素个数
%llength {1 2 {3 4}} 3
//语法:linsert list index value?value..…?//list插入元素
%linsert{1 2 5 6} 1 7 8 1 7 8 2 5 6
//语法:lappend varname value?value...? //把每个value的值作为一个元素附加到变量varname后面
%lappend a 1 2 3 1 2 3
语法:if test1 body1 ?else bodyn?
TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值。
if{$x>0}{
......
}elseif{$x==1}{
......}elseif{$x==2}{
......}else{
......}
注意{'一定要写在上一行,因为不这样,TCL解释器会认为if命令在换行符已经结束了;同时if和{之间应该有一个空格,否则TCL解释器会会把if{
作为一个整体命令导致出错
1、elseif没有空格,都用的表达式的求值,都是用花括号套起来的;
2、{一定要和i写在一行;否则解释器会认为结束了
//语法:while test body
//参数test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环,此时while命令中断并返回一个空字符串。此处是一个脚本:
set b " "
set i [expr[llength $a]-1]
while{$i>=0}{
lappend b [lindex $a $i]
incr i - 1
}//变量a是一个链表,脚本把a的值复制到b
//语法:for init test reinit body
//参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体;
//假设变量a是一个链表,下面的脚本把a的值复制到b:
set b ""
for {set i[expr[llength $a] - 1]}{$i>=0}{incr i - 1}{
lappend b[lindex $a $i]}
//作用和上面的例子是相同的
//语法:foreach varName list body第一个参数varName是一个变量,第二个参数list是一个表(有序集合),第三个参数body是循环体。每次取得链表的一个元素,都会执行循环体一次。
set b ""
foreach i $a{
set b[linsert $b 0 $i]
//变量a是一个链表,脚本把a的值复制到b
//语法:switch?options?string{pattern body?pattern body...?}
//第一个是可选参数options,表示进行匹配的方式。TCL支持三种匹配方式:-exact方式,-glob方式,-regexp方式,缺省情况表示-glob方式。-exact方式表示的是精确匹配,-glob方式的匹配方式和string match 命令的匹配方式相同,-regexp方式是正规表达式的匹配方式。第二个参数string是要被用来作测试的值,第三个参数是括起来的一个或多个元素对
%switch $x{ //一旦switch命令找到一个模式匹配
b{incr t1} //就执行相应的脚本,并返回脚本的
c{incr t2}} //值,作为switch命令的返回值。
在循环体中,可以用break和continue命令中断循环。其中break命令结束整个循环过程,并从循环中跳出,continue只是结束本次循环。
source命令读一个文件并把这个文件的内容作为一个脚本进行求值
%source e:/tcl&c/hello.tcl
eval命令是一个用来构造和执行TCL脚本的命令,其语法为:
eval arg?arg......?//它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。
%eval set a 2;set b 4 4
这篇笔记参考众多资料整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。