当前位置:   article > 正文

TCL基础入门2_tcl incr用法

tcl incr用法

相关命令

unset这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素

%unset a b day(monday)
  • 1

append命令把文本加到一个变量的后面

%set txt hello			%append txt "!How are you"
//Hello					hello!How are you 
  • 1
  • 2

incr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。

%set b 2;incr b 3				//结果为5
  • 1

表达式

TCL支持常用的数学函数,表达式中数学函数的写法类似于C\C++语言的写法,数学函数的参数可以是任意表达式,多个参数之间用逗号隔开。

%set x 2			%expr 2*sin($x<3)
2 					//1.68294196962
  • 1
  • 2

其中expr是TCL的一个命令,语法为:expr arg? arg...?
两个?之间的参数表示可省,后面介绍命令时对于可省参数都使用这种表示形式。
需要注意的一点是,数学函数并不是命令,只在表达式中出现才有意义,即出现在expr之后才有意义。

List

list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。

{}	//空list	{abcd}		{a{bc}d}	//list可以嵌套
  • 1

语法:list?value value…?这个命令生成一个list,list的元素就是所有的value。

%list 1 2 {3 4}			//1 2 {3 4}
  • 1
//语法:concat list?list...?//整合两个list
%concat 	{1 2 3} 	{4 5 6} 	{1 2 3 4 5 6}
  • 1
  • 2
//语法: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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

控制流:if命令

语法:if test1 body1 ?else bodyn?
TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值。
if{$x>0}{
......
}elseif{$x==1}{
......}elseif{$x==2}{
......}else{
......}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意{'一定要写在上一行,因为不这样,TCL解释器会认为if命令在换行符已经结束了;同时if和{之间应该有一个空格,否则TCL解释器会会把if{作为一个整体命令导致出错

1、elseif没有空格,都用的表达式的求值,都是用花括号套起来的;

2、{一定要和i写在一行;否则解释器会认为结束了

循环命令:while

//语法: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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

循环变量:for

//语法: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]}
//作用和上面的例子是相同的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

foreach命令

//语法:foreach varName list body第一个参数varName是一个变量,第二个参数list是一个表(有序集合),第三个参数body是循环体。每次取得链表的一个元素,都会执行循环体一次。
set b ""
foreach i $a{
set b[linsert $b 0 $i]
//变量a是一个链表,脚本把a的值复制到b
  • 1
  • 2
  • 3
  • 4
  • 5

switch命令

//语法: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命令的返回值。
  • 1
  • 2
  • 3
  • 4
  • 5

命令

在循环体中,可以用break和continue命令中断循环。其中break命令结束整个循环过程,并从循环中跳出,continue只是结束本次循环。
source命令读一个文件并把这个文件的内容作为一个脚本进行求值

%source e:/tcl&c/hello.tcl
  • 1

eval命令是一个用来构造和执行TCL脚本的命令,其语法为:

eval arg?arg......?//它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。
%eval set a 2;set b 4			4
  • 1
  • 2

这篇笔记参考众多资料整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/655135
推荐阅读
相关标签
  

闽ICP备14008679号