ImageVerifierCode 换一换
格式:DOCX , 页数:53 ,大小:62.52KB ,
资源ID:11655689      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11655689.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TCL教程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

TCL教程.docx

1、TCL教程1. TCL语法1.1. 脚本、命令和单词符号一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的: set a 1 set b 2 或 set a 1;set b 2TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。 TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution); 在执行阶段,TCL 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定

2、义就激活这个命令对应的C/C+过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。 1.2. 置换(substitution)注:在下面的所有章节的例子中,为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。/后面是我自己加上的说明,不是例子的一部分。 TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如: %set x 10 /定义变量x,并把x的值赋为10 10 %set y x+100 /y的值是x+100,而不是我们期望的110 x+100 上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值10 ,就必须告诉TC

3、L解释器:我们在这里期望的是变量x的值,而非字符x。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。 TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。 1.2.1. 变量置换(variable subtitution)变量置换由一个符号标记,变量置换会导致变量的值插入一个单词中。例如: %set y $x+100 /y的值是10+100,这里x被置换成它的值10 10100 这时,y的值还不是我们想要的值110,而是10+100,因为TCL解释器把10+10

4、0看成是一个字符串而不是表达式,y要想得到值110,还必须用命令置换,使得TCL会把10+100看成一个表达式并求值。 1.2.2. 命令置换(command substitution)命令置换是由括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。例如: %set y expr $x+100 110 y的值是110,这里当TCL解释器遇到字符时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C+过程,并把expr和变量置换后得到的10+110传递给该命令过程进行处理。 如果在上例中我们去掉,那么TCL会报错。因为在正常情况下,TC

5、L解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。 注意,中必须是一个合法的TCL脚本,长度不限。中脚本的值为最后一个命令的返回值,例如: %set y expr $x+100;set b 300 /y的值为300,因为set b 300的返回值为300 300 有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。 1.2.3. 反斜杠置换(backslash substitution)TCL语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、$等被TCL解释器当作特殊符号对待

6、的字符。例如: set msg multiple space /msg的值为multiple space。 如果没有的话,TCL会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,从而报错。加入了后,空格不被当作分隔符,multiple space被认为是一个单词(word)。又例如: %set msg money $3333 nArray a2 /这个命令的执行结果为:money $3333 Array a2 这里的$不再被当作变量置换符。 TCL支持以下的反斜杠置换: Backslash Sequence Replaced By a Audibl

7、e alert (0x7) b Backspace (0x8) f Form feed (0xc) n Newline (0xa) r Carriage return (0xd) t Tab (0x9) v Vertical tab (0xb) ddd Octal value given by ddd (one, two, or three ds) xhh Hex value given by hh (any number of hs) newline space A single space character. 例如: set a x48 /对应 xhh H /十六进制的48正好是72,对

8、应H set a 110 /对应 ddd H /八进制的110正好是72,对应H set a expr / 对应newline space,一个命令可以用newline转到下一行继续 2+3 5 1.2.4. 双引号和花括号 除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号()。 TCL解释器对双引号中的各种分隔符将不作处理,但是对换行符 及和两种置换符会照常处理。例如: %set x 100 100 %set y $x ddd 100 ddd 而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL

9、解释器不会对其作特殊处理。 %set y /n$x expr 10+100 /n$x expr 10+100 1.3. 注释TCL中的注释符是,和直到所在行结尾的所有字符都被TCL看作注释,TCL解释器对注释将不作任何处理。不过,要注意的是,必须出现在TCL解释器期望命令的第一个字符出现的地方,才被当作注释。 例如: %This is a comment %set a 100 # Not a comment wrong # args: should be set varName ?newValue? %set b 101 ; # this is a comment 101 第二行中就不被当作注

10、释符,因为它出现在命令的中间,TCL解释器把它和后面的字符当作命令的参数处理,从而导致错误。而第四行的就被作为注释,因为前一个命令已经用一个分号结束,TCL解释器期望下一个命令接着出现。现在在这个位置出现#,随后的字符就被当作注释了。 2. 变量2.1. 简单变量一个TCL的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为 “1323 7&*: hdgg的变量在TCL中都是合法的。不过为了更好的使用置换(substitution),变量名最好按CC+语言中标识符的命名规则命名。 TCL解释器在分析一个变量置换时,只把从符号往后直到第一个不是字母、数字或下划线的字符之间的

11、单词符号作为要被置换的变量的名字。例如: % set a 2 2 set a.1 4 4 % set b $a.1 2.1 在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是.)之间的单词符号(这里是a)当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。 当然,如果变量名中有不是字母、数字或下划线的字符,又要用置换,可以用花括号把变量名括起来。例如: %set b $a.1 4 TCL中的set命令能生成一个变量、也能读取或改变一个变量的值。例如:

12、 set a kdfj kjdf kdfj kjdf 如果变量a还没有定义,这个命令将生成 变量a,并将其值置为kdfj kjdf,若a已定义,就简单的把a的值置为kdfj kjdf。 set a kdfj kjdf 这个只有一个参数的set命令读取a的当前值kdfj kjdf。 2.2. 数组数组是一些元素的集合。TCL的数组和普通计算机语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标可以为任何字符串。例如: set day(monday) 1 set day(tu

13、esday) 2 第一个命令生成一个名为day的数组,同时在数组中生成一个名为monday的数组元素,并把值置为1,第二个命令生成一个名为tuesday的数组元素,并把值置为2。 简单变量的置换已经在前一节讨论过,这里讲一下数组元素的置换。除了有括号之外,数组元素的置换和简单变量类似。例: set a monday set day(monday) 1 set b $day(monday) /b的值为1,即day(monday)的值。 set c $day($a) /c的值为1,即day(monday)的值。 TCL不能支持复杂的数据类型,这是一个很大的缺憾,也是TCL受指责很多的方面。但是TC

14、L的一个扩展ITCL填补了这个缺憾2.3. 相关命令2.3.1. set这个命令在1.1已有详细介绍。 2.3.2. unset这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素。例如: % unset a b day(monday) 上面的语句中删除了变量a、b和数组元素day(monday),但是数组day并没有删除,其他元素还存在,要删除整个数组,只需给出数组的名字。例如: %puts $day(monday) cant read day(monday): no such element in array % puts $d

15、ay(tuesday) 2 %unset day % puts $day(tuesday) cant read day(tuesday): no such variable 2.3.3. append和incr这两个命令提供了改变变量的值的简单手段。 append命令把文本加到一个变量的后面,例如: % set txt hello hello % append txt ! How are you hello! How are you incr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。 %set b a a % incr b expected integer

16、but got a %set b 2 2 %incr b 3 5 3. 表达式 3.1. 操作数TCL表达式的操作数通常是整数或实数。整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作是十六进制的。TCL的实数的写法与ANSI C中完全一样。如: 2.1 7.9e+12 6e4 3. 3.2. 运算符和优先级下面的表格中列出了TCL中用到的运算符,它们的语法形式和用法跟ANSI C中很相似。这里就不一一介绍。下表中的运算符是按优先级从高到低往下排列的。同一格中的运算符优先级相同。 语法形式结果操作数类型-a!a

17、a负a非aint,floatint,floatinta*ba/ba%b乘除取模int,floatint,floatinta+ba-b加减int,floatint,floatab左移位右移位intintaba=b小于大于小于等于大于等于int,float,stringint,float,stringint,float,stringint,float,stringa= =ba!=b等于不等于int,float,stringint,float,stringa&b位操作与intab位操作异或inta|b位操作或inta&b逻辑与int,floata|b逻辑或int,floata?b:c选择运算a:in

18、t,float3.3. 数学函数TCL支持常用的数学函数,表达式中数学函数的写法类似于CC+语言的写法,数学函数的参数可以是任意表达式,多个参数之间用逗号隔开。例如: %set x 2 2 % expr 2* sin($x3) 1.68294196962 其中expr是TCL的一个命令,语法为: expr arg ?arg .? 两个 ?之间的参数表示可省,后面介绍命令时对于可省参数都使用这种表示形式。 expr可以有一个或多个参数,它把所有的参数组合到一起,作为一个表达式,然后求值: %expr 12*3 7 %expr 1 +2 *3 7 需要注意的一点是,数学函数并不是命令,只在表达式中

19、出现才有意义。 TCL中支持的数学函数如下 abs( x) Absolute value of x. acos( x) Arc cosine of x, in the range 0 to p. asin( x) Arc sine of x, in the range -p/2 to p/2. atan( x) Arc tangent of x, in the range -p/2 to p/2. atan2( x, y) Arc tangent of x/ y, in the range -p/2 to p/2. ceil( x) Smallest integer not less than

20、 x. cos( x) Cosine of x ( x in radians). cosh( x) Hyperbolic cosine of x. double( i) Real value equal to integer i. exp( x) e raised to the power x. floor( x) Largest integer not greater than x. fmod( x, y) Floating-point remainder of x divided by y. hypot( x, y) Square root of ( x 2 + y 2 ). int( x

21、) Integer value produced by truncating x. log( x) Natural logarithm of x. log10( x) Base 10 logarithm of x. pow( x, y) x raised to the power y. round( x) Integer value produced by rounding x. sin( x) Sine of x ( x in radians). sinh( x) Hyperbolic sine of x. sqrt( x) Square root of x. tan( x) Tangent

22、 of x ( x in radians). tanh( x) Hyperbolic tangent of x. TCL中有很多命令都以表达式作为参数。最典型的是expr命令,另外if、while、for等循环控制命令的循环控制中也都使用表达式作为参数。 4. List list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。下面都是TCL中的合法的list: /空list a b c d a b c d /list可以嵌套 list是TCL中比较重要的一种数据结构,对于编写复杂的脚本有很

23、大的帮助,TCL提供了很多基本命令对list进行操作,下面一一介绍: 4.1. list命令语法: list ? value value.? 这个命令生成一个list,list的元素就是所有的value。例: % list 1 2 3 4 1 2 3 4 4.2. concat命令语法:concat list ?list.? 这个命令把多个list合成一个list,每个list变成新list的一个元素。 4.3. lindex命令语法:lindex list index 返回list的第index个(0-based)元素。例: % lindex 1 2 3 4 2 3 4 4.4. lleng

24、th命令语法:llength list 返回list的元素个数。例 % llength 1 2 3 4 3 4.5. linsert命令语法:linsert list index value ?value.? 返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。例: % linsert 1 2 3 4 1 7 8 9 10 1 7 8 9 10 2 3 4 4.6. lreplace命令语法:lreplace list first last ?value value .? 返回一个新串,新串是把list的第firs (0-based)t到第l

25、ast 个(0-based)元素用所有的value参数替换得到的。如果没有value参数,就表示删除第first到第last个元素。例: % lreplace 1 7 8 9 10 2 3 4 3 3 1 7 8 2 3 4 % lreplace 1 7 8 2 3 4 4 4 4 5 6 1 7 8 2 4 5 6 4.7. lrange命令语法:lrange list first last 返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。 例: % lrange 1 7 8 2 4 5

26、6 3 end 2 4 5 6 4.8. lappend命令语法:lappend varname value ?value.? 把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。例: % lappend a 1 2 3 1 2 3 % set a 1 2 3 4.9. lsearch命令语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern 返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。-exact、-glob、 -regexp是三种模式匹配

27、的技术。-exact表示精确匹配;-glob的匹配方式和string match命令的匹配方式相同,将在后面第八节介绍string命令时介绍;-regexp表示正规表达式匹配,将在第八节介绍regexp命令时介绍。缺省时使用-glob匹配。例: % set a how are you how are you % lsearch $a y* 2 % lsearch $a y? -1 4.10. lsort命令语法:lsort ?options? list 这个命令返回把list排序后的串。options可以是如下值: -ascii 按ASCII字符的顺序排序比较.这是缺省情况。 -diction

28、ary 按字典排序,与-ascii不同的地方是: (1)不考虑大小写 (2)如果元素中有数字的话,数字被当作整数来排序. 因此:bigBoy排在bigbang和bigboy之间, x10y 排在x9y和x11y之间. -integer 把list的元素转换成整数,按整数排序. -real 把list的元素转换成浮点数,按浮点数排序. -increasing 升序(按ASCII字符比较) -decreasing 降序(按ASCII字符比较) -command command TCL自动利用command 命令把每两个元素一一比较,然后给出排序结果。 4.11. split命令语法:split s

29、tring ?splitChars? 把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars 是一个空字符,string被按字符分开。如果splitChars没有给出,以空格为分隔符。例: % split how.are.you . how are you % split how are you how are you % split how are you h o w a r e y o u 4.12. join命令语法:join list ?joinString? join命令是命令的逆。这个命令把list的所有元素合并到一个字符串

30、中,中间以joinString分开。缺省的joinString是空格。例: % join h o w a r e y o u how are you % join how are you . how.are.you 5. 控制流 5.1. if命令TCL中的控制流和C语言类似,包括if、while、for、foreach、switch、break、continue等命令。语法: if test1 body1 ?elseif test2 body2 elseif. ? ?else bodyn? TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得值,否则把test2当作一个表达式求值,如

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1