Tcl脚本语言教程 - 图文(3)

2019-06-17 12:57

List > concat命令

语法:concat list ?list...?

这个命令把多个list合成一个list,每个list变成新list的一个元素。

List > lindex命令

语法:lindex list index

返回list的第index个(0-based)元素。例: % lindex {1 2 {3 4}} 2 3 4

List > llength命令

语法:llength list 返回list的元素个数。例 % llength {1 2 {3 4}} 3

List > 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} List > lreplace命令

语法:lreplace list first last ?value value ...?

返回一个新串,新串是把list的第firs (0-based)t到第last 个(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

11

List > lrange命令

语法:lrange list first last

返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。 例:

% lrange {1 7 8 2 4 5 6} 3 end 2 4 5 6 List > lappend命令

语法:lappend varname value ?value...?

把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。例: % lappend a 1 2 3 1 2 3 % set a 1 2 3 List > lsearch命令

语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern

返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。-exact、-glob、 -regexp是三种模式匹配的技术。-exact表示精确匹配;-glob的匹配方式和string match命令的匹配方式相同,将在后面第八节介绍string命令时介绍;-regexp表示正规表达式匹配,将在第八节介绍regexp命令时介绍。缺省时使用-glob匹配。例: % set a { how are you } how are you % lsearch $a y* 2

% lsearch $a y? -1

List > lsort命令

语法:lsort ?options? list

这个命令返回把list排序后的串。options可以是如下值: -ascii 按ASCII字符的顺序排序比较.这是缺省情况。 -dictionary 按字典排序,与-ascii不同的地方是:

1 2

(1)不考虑大小写

(2)如果元素中有数字的话,数字被当作整数来排序.

因此:bigBoy排在bigbang和bigboy之间, x10y 排在x9y和x11y之间. -integer 把list的元素转换成整数,按整数排序. -real 把list的元素转换成浮点数,按浮点数排序. -increasing 升序(按ASCII字符比较) -decreasing 降序(按ASCII字符比较)

-command command TCL自动利用command 命令把每两个元素一一比较,然后给出排序结果。

List > split命令

语法:split string ?splitChars?

把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars

是一个空字符{},string被按字符分开。如果splitChars没有给出,以空格为分隔符。例: % split \ how are you

% split \ how are you

% split \ h o w { } a r e { } y o u List > join命令

语法:join list ?joinString?

join命令是命令的逆。这个命令把list的所有元素合并到一个字符串中,中间以joinString分开。缺省的joinString是空格。例: % join {h o w { } a r e { } y o u} {} how are you

% join {how are you} . how.are.you 控制流 > if命令

TCL中的控制流和C语言类似,包括if、while、for、foreach、switch、break、continue等命令。

语法: if test1 body1 ?elseif test2 body2 elseif.... ? ?else bodyn?

TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得

13

值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值……。例如: if { $x>0 } { .....

}elseif{ $x==1 } { .....

}elseif { $x==2 } { .... }else{ ..... }

注意,上例中'{'一定要写在上一行,因为如果不这样,TCL 解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。在下面的循环命令的书写中也要注意这个问题。书写中还要注意的一个问题是if 和{之间应该有一个空格,否则TCL解释器会把'if{'作为一个整体当作一个命令名,从而导致错误。

控制流 > 循环命令

循环命令包括while、for、foreach等。 ■while命令

语法为: while test body

参数test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环,此时while命令中断并返回一个空字符串。 例如:

假设变量 a 是一个链表,下面的脚本把a 的值复制到b: set b \

set i [expr [llength $a] -1] while { $i>=0}{ lappend b [lindex $a $i] incr i -1 } ■for命令

语法为: for init test reinit body

参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体。下例与上例作用相同:

1 4

set b \

for {set i [expr [llength $a] -1]} {$i>=0} {incr i -1} { lappend b [lindex $a $i] } ■foreach命令 这个命令有两种语法形式 1、 foreach varName list body

第一个参数varName是一个变量,第二个参数list 是一个表(有序集合),第三个参数body是循环体。每次取得链表的一个元素,都会执行循环体一次。 下例与上例作用相同: set b \ foreach i $a{

set b [linsert $b 0 $i] }

2、 foreach varlist1 list1 ?varlist2 list2 ...? Body

这种形式包含了第一种形式。第一个参数varlist1是一个循环变量列表,第二个参数是一个列表list1,varlist1中的变量会分别取list1中的值。body参数是循环体。 ?varlist2 list2 ...?表示可以有多个变量列表和列表对出现。例如: set x {}

foreach {i j} {a b c d e f} { lappend x $j $i }

这时总共有三次循环,x的值为\。 set x {}

foreach i {a b c} j {d e f g} { lappend x $i $j }

这时总共有四次循环,x的值为\。 set x {}

foreach i {a b c} {j k} {d e f g} { lappend x $i $j $k }

这时总共有三次循环,x的值为\。

15


Tcl脚本语言教程 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:仪容礼仪规范

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: