logo资料库

TCL语言教程.pdf

第1页 / 共84页
第2页 / 共84页
第3页 / 共84页
第4页 / 共84页
第5页 / 共84页
第6页 / 共84页
第7页 / 共84页
第8页 / 共84页
资料共84页,剩余部分请下载后查看
Tcl
TCL语法
■脚本、命令和单词符号
■置换(substitution)
■变量置换(variable subtitution)
■命令置换(command substitution)
■反斜杠置换(backslash substitution)
■双引号和花括号
■注释
变量
■简单变量
■数组
■相关命令
■set
■unset
■append和incr
表达式
■操作数
■运算符和优先级
■数学函数
List
■list命令
■concat命令
■lindex命令
■llength命令
■linsert命令
■lreplace命令
■lrange 命令
■lappend命令
■lsearch 命令
■lsort命令
■split命令
■join命令
控制流
■if命令
■循环命令:while 、for、 foreach
■while命令
■for命令
■foreach命令
■break和continue命令
■switch 命令
■eval命令
■source命令
过程(procedure)
■过程定义和返回值
■局部变量和全局变量
■缺省参数和可变个数参数
■引用:upvar
字符串操作
■format命令
■scan命令
■regexp命令
【TCL正则表达式规则详细说明】
◆DESCRIPTION(描述)
■regsub命令
■string命令
■1、string compare ?-nocase? ?-length int? string1 string2
■2、string equal ?-nocase? ?-length int? string1 string2
■3、string first string1 string2 ?startindex?
■4、string index string charIndex
■5、string last string1 string2 ?startindex?
■6、string length string
■7、string match ?-nocase? pattern string
■8、string range string first last
■9、string repeat string count
■10、string replace string first last ?newstring?
■11、string tolower string ?first? ?last?
■12、string toupper string ?first? ?last?
■13、string trim string ?chars?
■14、string trimleft string ?chars?
■15、string trimright string ?chars?
文件访问
■文件名
■基本文件输入输出命令
■随机文件访问
■当前工作目录
■文件操作和获取文件信息
错误和异常
■错误
■从TCL脚本中产生错误
■使用catch捕获错误
■其他异常
深入TCL
■查询数组中的元素
■info命令
■变量信息
■过程信息
■命令信息
■TCL的版本和库
■命令的执行时间
■跟踪变量
■命令的重命名和删除
■unknown命令
■自动加载
3/25/2006 10:11:08 PM 1 Tcl教程 [Edit by roben_chen] http://2316.vip.nease.net/scriptnet/ssdn/index.htm
3/25/2006 10:11:08 PM 2 目录 Tcl ............................................................................5 TCL语法..................................................................5 ■脚本、命令和单词符号.......................................................................................................5 ■置换(substitution) .................................................................................................................6 ■变量置换(variable subtitution) .....................................................................................6 ■命令置换(command substitution).................................................................................6 ■反斜杠置换(backslash substitution).............................................................................7 ■双引号和花括号...........................................................................................................8 ■注释.......................................................................................................................................9 变量......................................................................10 ■简单变量.............................................................................................................................10 ■数组.....................................................................................................................................11 ■相关命令.............................................................................................................................12 ■set ................................................................................................................................12 ■unset ............................................................................................................................12 ■append和incr...............................................................................................................12 表达式...................................................................14 ■操作数.................................................................................................................................14 ■运算符和优先级.................................................................................................................15 ■数学函数.............................................................................................................................16 List......................................................................18 ■list命令................................................................................................................................18 ■concat命令 ..........................................................................................................................19 ■lindex命令...........................................................................................................................20 ■llength命令 .........................................................................................................................21 ■linsert命令...........................................................................................................................22 ■lreplace命令........................................................................................................................23 ■lrange 命令.........................................................................................................................24 ■lappend命令........................................................................................................................25 ■lsearch 命令 .......................................................................................................................26 ■lsort命令 .............................................................................................................................27 ■split命令..............................................................................................................................28 ■join命令 ..............................................................................................................................29 控制流...................................................................30 ■if命令 ..................................................................................................................................30 ■循环命令:while 、for、 foreach ...................................................................................31
3/25/2006 10:11:08 PM 3 ■while命令....................................................................................................................31 ■for命令........................................................................................................................31 ■foreach命令.................................................................................................................31 ■break和continue命令 ..................................................................................................32 ■switch 命令 ................................................................................................................32 ■eval命令..............................................................................................................................34 ■source命令 ..........................................................................................................................35 过程(procedure) ...................................................36 ■过程定义和返回值.............................................................................................................36 ■局部变量和全局变量.........................................................................................................37 ■缺省参数和可变个数参数.................................................................................................38 ■引用:upvar........................................................................................................................39 字符串操作.............................................................40 ■format命令..........................................................................................................................40 ■scan命令 .............................................................................................................................41 ■regexp命令..........................................................................................................................42 【TCL正则表达式规则详细说明】 .............................................................................44 ■regsub命令..........................................................................................................................55 ■string命令 ...........................................................................................................................56 ■1、string compare ?-nocase? ?-length int? string1 string2 .........................................56 ■2、string equal ?-nocase? ?-length int? string1 string2 ..............................................56 ■3、string first string1 string2 ?startindex?..................................................................56 ■4、string index string charIndex.................................................................................56 ■5、string last string1 string2 ?startindex?...................................................................57 ■6、string length string.................................................................................................57 ■7、string match ?-nocase? pattern string....................................................................57 ■8、string range string first last....................................................................................58 ■9、string repeat string count.......................................................................................58 ■10、string replace string first last ?newstring?...........................................................58 ■11、string tolower string ?first? ?last?........................................................................58 ■12、string toupper string ?first? ?last? .......................................................................58 ■13、string trim string ?chars?.....................................................................................58 ■14、string trimleft string ?chars?................................................................................59 ■15、string trimright string ?chars? .............................................................................59 文件访问................................................................60 ■文件名.................................................................................................................................60 ■基本文件输入输出命令.....................................................................................................61 ■随机文件访问.....................................................................................................................63 ■当前工作目录.....................................................................................................................64 ■文件操作和获取文件信息.................................................................................................65 错误和异常.............................................................69
3/25/2006 10:11:08 PM 4 ■错误.....................................................................................................................................69 ■从TCL脚本中产生错误 .....................................................................................................71 ■使用catch捕获错误 ............................................................................................................72 ■其他异常.............................................................................................................................73 深入TCL ................................................................75 ■查询数组中的元素.............................................................................................................75 ■info命令 ..............................................................................................................................77 ■变量信息.....................................................................................................................77 ■过程信息.....................................................................................................................78 ■命令信息.....................................................................................................................79 ■TCL的版本和库 .........................................................................................................79 ■命令的执行时间.........................................................................................................79 ■跟踪变量.....................................................................................................................80 ■命令的重命名和删除.................................................................................................82 ■unknown命令..............................................................................................................83 ■自动加载.....................................................................................................................83
3/25/2006 10:11:08 PM 5 Tcl TCL 语法 ■脚本、命令和单词符号 一个 TCL 脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本 都是合法的: set a 1 set b 2 或 set a 1;set b 2 TCL 的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的 参数,单词之间必须用空格或 TAB 键隔开。 TCL 解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规 则把命令分成一个个独立的单词,同时进行必要的置换(substitution); 在执行阶段,TCL 解 释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应 的 C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。
3/25/2006 10:11:08 PM 6 ■置换(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' ,就必 须告诉 TCL 解释器:我们在这里期望的是变量 x 的值,而非字符'x'。怎么告诉 TCL 解释器呢, 这就要用到 TCL 语言中提供的置换功能。 TCL 提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个 单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌 套。 ■变量置换(variable subtitution) 变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如: %set y $x+100 //y 的值是 10+100,这里 x 被置换成它的值 10 10+100 这时,y 的值还不是我们想要的值 110,而是 10+100,因为 TCL 解释器把 10+100 看成是 一个字符串而不是表达式,y 要想得到值 110,还必须用命令置换,使得 TCL 会把 10+100 看 成一个表达式并求值。 ■命令置换(command substitution) 命令置换是由[]括起来的 TCL 命令及其参数,命令置换会导致某一个命令的所有或部分单词被 另一个命令的结果所代替。例如: %set y [expr $x+100] 110
3/25/2006 10:11:08 PM 7 y 的值是 110,这里当 TCL 解释器遇到字符'['时,它就会把随后的 expr 作为一个命令名,从 而激活与 expr 对应的 C/C++过程,并把'expr'和变量置换后得到的'10+110'传递给该命令过 程进行处理。 如果在上例中我们去掉[],那么 TCL 会报错。因为在正常情况下,TCL 解释器只把命令行中的 第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。 注意,[]中必须是一个合法的 TCL 脚本,长度不限。[]中脚本的值为最后一个命令的返回值, 例如: %set y [expr $x+100;set b 300] //y 的值为 300,因为 set b 300 的返回值为 300 300 有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参 数。 ■反斜杠置换(backslash substitution) TCL 语言中的反斜杠置换类似于 C 语言中反斜杠的用法,主要用于在单词符号中插入诸如换行 符、空格、[、$等被 TCL 解释器当作特殊符号对待的字符。例如: set msg multiple\ space //msg 的值为 multiple space。 如果没有'\'的话,TCL 会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符, 于是发现 set 命令有多于两个参数,从而报错。加入了'\'后,空格不被当作分隔符,'multiple space'被认为是一个单词(word)。又例如: %set msg money\ \$3333\ \nArray\ a\[2] //这个命令的执行结果为:money $3333 Array a[2] 这里的$不再被当作变量置换符。 TCL 支持以下的反斜杠置换: Backslash Sequence Replaced By \a Audible 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 d's) \xhh Hex value given by hh
3/25/2006 10:11:08 PM 8 (any number of h's) \ newline space A single space character. 例如: %set a \x48 //对应 \xhh H //十六进制的 48 正好是 72,对应 H % set a \110 //对应 \ddd H //八进制的 110 正好是 72,对应 H %set a [expr \ // 对应\newline space,一个命令可以用\newline 转到下一行继续 2+3] 5 ■双引号和花括号 除了使用反斜杠外,TCL 提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普 通字符,而不作特殊处理,这就要使用双引号和花括号({})。 TCL 解释器对双引号中的各种分隔符将不作处理,但是对换行符 及$和[]两种置换符会照常处 理。例如: %set x 100 100 %set y "$x ddd" 100 ddd 而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL 解释器不会对其作特 殊处理。 %set y {/n$x [expr 10+100]} /n$x [expr 10+100]
分享到:
收藏