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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Tcl语言基础教程文档格式.docx

1、必须出现在Tcl解释器期望命令的第一个字符出现的地方,才被当作注释。例如:set a 100 # Not a commentset b 101 ; # this is a comment第一个例子中#及其后面的内容会被当作set 的参数而非注释从而导致参数个数错误;但第二个被解释为注释,因为前面有一个分号,而分号和换行一样被看作是命令的分隔符。脚步命令:(1)eval命令eval命令是一个用来构造和执行TCL脚本的命令,其语法为: eval arg arg .它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。(2)source命令source命

2、令读一个文件并把这个文件的内容作为一个脚本进行求值。source e:/tcl&c/注意路径的描述应该和UNIX相同,使用/而不是。2、置换(Substitution)set x 10set y 100 + x上面命令执行后,y的值是“100 + x”而不是我们期望的110。这是因为Tcl解释器在分析命令时,把所有的命令参数都当作字符串看待,所以x 被看作了字符串“100 + x”的一部分。如果我们想使用x的值10 ,就必须告诉Tcl解释器:我们在这里期望的是变量x的值,而非字符x怎么告诉Tcl解释器呢,这就要用到Tcl语言中提供的置换功能。Tcl提供三种形式的置换:变量置换、命令置换和反斜杠

3、置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。(1)变量置换(variable substitution)变量置换由一个符号标记,变量置换会导致变量的值而非变量(标识符)本身被插入到字符串中。set y 100 + $x这时,y的值还不是我们想要的值110,而是10+100,因为Tcl解释器把10+100看成是一个字符串而不是表达式;y要想得到值110,还必须用命令置换,使得Tcl会把10+100看成一个表达式并求值。(2)命令置换(command substitution)命令置换是由括起来的Tcl命令及其参数,命令置

4、换会导致某一个命令的所有或部分单词(参数)被另一个命令的结果所代替。set y expr 100+$x这时,y的值就是110了。这里当Tcl解释器遇到字符时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C+过程,并把expr命令中变量置换后得到的10+110传递给该命令过程进行处理。注意,中必须是一个合法的Tcl脚本,长度不限。中脚本的值为最后一个命令的返回值,例如:有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。(3)反斜杠置换(backslash subtitution)Tcl语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用

5、于在单词符号中插入诸如换行符、空格、$等被Tcl解释器当作特殊符号对待的字符。set msg multiple space 如果没有的话,Tcl会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,从而报错。加入了后,空格不被当作分隔符,multiple space被认为是一个单词(word)。(4)双引号和花括号除了使用反斜杠外,Tcl提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号()。Tcl解释器对双引号中的各种分隔符将不作处理,但是对换行符及和两种置换符会照常处理。而在花括号中,所有特

6、殊字符都将成为普通字符,失去其特殊意义,Tcl解释器不会对其作特殊处理。二、Tcl变量数据类型Tcl只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。(然而字符串的实际解释是依赖于其所处上下文。它有三种形式:命令, 表达式和表)。Tcl变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。(1)简单变量一个Tcl的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按CC+语言中标识符的命名规则命名。这是因为Tcl解释器在分析一个变量置换时,

7、只把从符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:set a 2set 5set b $在最后一个命令行,我们希望把变量的值付给b,但是Tcl解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是.)之间的单词符号(这里是a)当作要被置换的变量的名字,所以Tcl解释器把a置换成2,然后把字符串“”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。set b $(2)数组变量数组是一些元素的集合。Tcl的数组和一般编程语言中的数组有很大的区别。在Tcl

8、中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,Tcl中数组元素的名字(下标可以为任何字符串。set day(monday) 1 set day(tuesday) 2(3)重用结构及其操作1、string结构及其操作因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能【format】语法:format formatstring vlue value.format命令类似于ANSIC中的sprintf函数,它按formatstring提供的格式,把各个value的值组合到formatstring中形成一个新字

9、符串,并返回。set msg format %s is %d years old $name $age 【scab】scan string formatsting varName varName .scan命令可以认为是format命令的逆,其功能类似于ANSI C中的sscanf函数。它按formatsting提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和formatsting中的字符和%必须匹配。scan some 26 34 some %d %d a b【regexp】regexp switchs - exp strin

10、g matchVar subMatchVar subMatchVar.regexp命令用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0。regexp可以设置一些开关(switchs,来控制匹配的具体方式,如:-nocase,-line等,其中- 表示这后面再没有开关(switchs了,即使后面有以-开头的参数也被当作正规表达式的一部分。如果regexp命令后面有参数matchVar和subMatchVar,则所有的参数被当作变量名,如果变量不存在,就会被生成。regexp把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给

11、第二个变量,依次类推,例如:regexp (0-9+) *(a-z+) there is 100 apples total num word 1 puts $total ,$num,$word显示结果为:100 apples ,100,apples其他具体的正则表达式规则请参考Tcl语言手册【regsub】regsub switchs exp string subSpec varnameregsub的第一个参数是一个整个表达式,第二个参数是一个输入字符串,这一点和regexp命令完全一样,也是当匹配时返回1,否则返回0。不过regsub用第三个参数的值来替换字符串string中和正规表达式匹配

12、的部分,第四个参数被认为是一个变量,替换后的字符串存入这个变量中。regsub there They live there lives their x puts $x They live their lives【sting】string subcmd arg arg.string命令具有强大的操作字符串的功能,并通过其中的subcmd来区别具体将要执行的string操作。他们中的一些如下:string length stringstring range string first laststring index string charIndexstring tolower string fir

13、st laststring replace string first last newstringstring equal -nocase -length int string1 string2string match -nocase pattern string 如果pattern 匹配string,那么返回1,否则返回0.string compare -nocase -length int string1 string2 如果有 -length 参数,那么只比较前 int 个字符string first string1 string2 startindex 在string2 中从头查找与s

14、tring1匹配的字符序列,如果找到,那么就返回匹配的第一个字母所在的位置(0-based)。如果没有找到,那么返回-1。string trim string chars 返回值为:从string字符串的首尾删除掉了字符集合chars中的字符后的字符串。如果没有给出chars,那么将删除掉spaces、tabs、newlines、carriage returns这些字符.2、list结构及其操作list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。Tcl提供了很多基本命令对list进行操

15、作:【list】list value value.这个命令生成一个list,list的元素就是所有的value【concat】concat list list.这个命令把多个list合成一个list.【llength】llength list返回list的元素个数。【lindex】lindex list index返回list的第index个(0-based)元素。【lrange】语法:lrange list first last 返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。【linse

16、rt】linsert list index value value.返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。【lappend】lappend varname value value.把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。【lreplace】lreplace list first last value value .返回一个新串,新串是把list的第firs (0-based)t到第last 个(0-based)元素用所有的value参数替换得到的。

17、value参数,就表示删除第first到第last个元素。【lsort】lsort options list 这个命令返回把list排序后的串。options可以是如下值:-ascii 按ASCII字符的顺序排序比较.这是缺省情况。-dictionary 按字典排序,与-ascii不同的地方是:(1)不考虑大小写 (2)如果元素中有数字的话,数字被当作整数来排序. 【lsearch】lsearch -option list pattern 返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。option取-exact、-glob、 -regexp是三种模式匹配的技

18、术,缺省时使用-glob匹配。【join】join list joinString这个命令把list的所有元素合并到一个字符串中,中间以joinString分开。缺省的joinString是空格。【split】split string splitChars把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars 是一个空字符,string被按字符分开。如果splitChars没有给出,以空格为分隔符。3、file结构及其操作TCL提供了丰富的文件操作的命令。通过这些命令你可以对文件名进行操作(查找匹配某一模式的文件)、以顺序或随机方式读写

19、文件、检索系统保留的文件信息(如最后访问时间)。基本文件I/Opwd和UNIX下的pwd命令完全一样, 没有参数,返回当前目录的完整路径。cd 命令也和UNIX命令也一样,使用一个参数,可以把工作目录改变为参数提供的目录。以下这个名为tgrep的过程,可以说明TCL文件I/O的基本特点:proc tgrep pattern filename set f open $filename r while gets $f line if regexp $pattern $line puts stdout $line close $f open命令返回一个字符串用于表识打开的文件。当调用别的命令(如:g

20、ets,puts,close,对打开的文件进行操作时,就可以使用这个文件标识符。TCL有三个特定的文件标识: stdin,stdout和stderr ,分别对应标准输入、标准输出和错误通道,任何时候你都可以使用这三个文件标识。随即文件访问默认文件输入输出方式是连续的:即每个gets或 read命令返回的是上次gets或 read访问位置后面的字节,每个puts命令写数据是接着上次puts写的位置接着写。TCL提供了seek,tell和eof等命令使用户可以非连续访问文件。每个打开的打开文件都有访问点,即下次读写开始的位置。文件打开时,访问点总是被设置为文件的开头或结尾,这取决于打开文件时使用的

21、访问模式。每次读写后访问位置按访问的字节数后移相应的位数。seek fileId offset origin 把fileId标识的文件的访问点设置为相对于origin偏移量为offset的位置。origin可以是start,current,end,默认是start。tell fileId 返回fileId标识的文件的当前访问位置。eof fileId 如果到达fileId标识的文件的末尾返回1,否则返回0。文件操作和获取文件信息【grob】glob switches pattern pattern .glob命令的模式采用string match命令的匹配规则,返回匹配这个(些)模式的所有文件

22、的列表。如:glob *.c *.hglob */ 只返回当前目录的所有子目录。【file】file subcmd arg arg.file 通过众多的subcmd子操作提供强大的文件操作和访问能力。file exists namefile extension namefile mkdir dir dir .file copy -force - source targetfile rename -force - source targetfile delete -force - pathname pathname . 三、Tcl表达式(1)操作数Tcl表达式的操作数通常是整数或实数。整数一般是

23、十进制的, 但如果整数前两个字符是0x则这个整数被看作是十六进制的。Tcl的实数的写法与ANSI C中完全一样。(2)运算符Tcl中的运算符的语法形式和用法跟ANSI C中完全一致。另外,Tcl中提供了大量的常用数学函数来增强自身的数学运算和处理能力,这些函数的形式和用法大都与ANSI C中的数学函数完全一致。四、Tcl流程控制TCL中的控制流和C语言类似,包括if、switch、for、while、foreach、break、continue等命令。(1)条件语句if $x0 . elseif $x1 elseif $x2 . else 注意,上例中一定要写在上一行,因为如果不这样,TCL

24、解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。在Tcl的其他流程控制命令的书写中也要注意这个问题。书写中还要注意的一个问题是if 和之间应该有一个空格,否则TCL解释器会把if作为一个整体当作一个命令名,从而导致错误。switch option $x a - b incr t1 c incr t2 default incr t3 其中可选参数option,表示进行匹配的方式。TCL支持三种匹配方式:-exact方式,-glob方式,-regexp方式,缺省情况表示-glob方式。-exact方式表示的是精确匹配,-glob方式的匹配方式和string mat

25、ch 命令的匹配方式相同,-regexp方式是正规表达式匹配方式。条件中a的后面跟一个表示使用和下一个模式相同的脚本,default表示匹配任意值。一旦switch命令 找到一个模式匹配,就执行相应的脚本,并返回脚本的值作为switch命令的返回值。(2)循环语句for init test reinit body 参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本。set b for set i expr llength $a -1 $i=0 incr i -1 lappend b l

26、index $a $i while的例子假设变量 a 是一个链表,下面的脚本把a 的值复制到b:set i expr llength $a -1 while $i=0 incr i -1 foreach命令的两种形式:1、foreach varName list body 第一个参数varName是一个变量,第二个参数list 是一个表(有序集合),第三个参数body是循环体。每次取得链表的一个元素,都会执行循环体一次。foreach i $aset b linsert $b 0 $i 2、foreach varlist1 list1 varlist2 list2 . body本语句是上一个的增强形式:可以有多个变量、列表对参与条件判断五、Tcl过程TCL支持过程的定义和调用,在TCL中,过程可以看作是用T

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

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