列表操作在指令碼中使用的頻率非常高,基本上每個指令碼都會涉及到其中的一些操作,在這裡對列表的命令進行例項解析,以加深對列表命令的理解,本文涉及的命令為llength、lindex、lrange、lsearch和lassign。
llengthlist
返回乙個列表的元素個數,非常簡單而又常用的命令。
% llength 5
lindexlist ?index...?
根據索引值,找出列表中索引為index的元素,如果沒有index就返回整個列表,如果有多個index就返回列表的子列表的元素,具體示例如下:
返回整個列表:
% lindex
this is a tcltk example
返回列表中索引為3的元素:
% lindex 3
tcltk
返回列表中索引為2的元素
% lindex a } 2
tcltk example
返回列表中索引為2的子列表中索引為1的元素
% lindex a } 2 1
example
lrangelist first last
返回列表乙個區間的元素,這個區間由first和last指定。
% lrange 1 3
is a tcltk
lsearch?
options?
list pattern
在列表中尋找元素,這裡的標誌位比較多,下面一一介紹,多個標誌位可以互相混用。
以下是匹配風格標誌位:
尋找的列表元素嚴格匹配pattern,也就是說pattern就是列表中的乙個元素才能找到,返回元素的索引:
% lsearch -exact is
1 以glob風格匹配pattern,沒有匹配風格標誌位的話預設就是glob,搜尋以is結尾的字元:
% lsearch -glob *is
0 以正規表示式風格匹配,搜尋以is結尾的字元:
% lsearch -regexp .*is
0 以下是一些修飾標誌位:
返回所有符合匹配風格的元素索引:
% lsearch -all *is
0 1 返回符合匹配風格的元素值而不是索引:
% lsearch -inline -all *is
this is
返回不符合匹配風格的元素索引:
% lsearch -not -all *is
2 3 4
從指定的索引開始搜尋,下面的例子只返回了索引1,沒有返回索引0:
% lsearch -start 1 -all *is
1 內容描述標誌位:
所匹配的內容為ascii碼,使用-ascii標誌位,預設就是。
可以和-sorted一起使用-dictionary來標誌以字典順序匹配。
使用-integer說明列表元素被當作整數匹配。
-real說明列表元素被當作浮點數匹配。
-nocase忽略大小寫:
% lsearch -nocase this
0 還有兩個排序標誌位,需要和sorted一起使用,-decreasing和-increasing分別代表降序和公升序。
兩個嵌入式標誌位:
-index,匹配子列表中的索引,下面的例子匹配子列表中的第二個元素,有這個標誌位要求list中每個元素都必須有子列表,並且有需要檢查的index:
% lsearch -index 1 -all } *a*
1 2 -subindices,需要和-index一起使用,返回匹配的全路徑:
% lsearch -index 1 -all -subindices } *a*
lassignlist varname ?
varname ...?
將列表元素賦值給變數,直接採用help裡面的例子,非常明確了:
lassign x y z ;# 返回空
puts $x ;# prints "a"
puts $y ;# prints "b"
puts $z ;# prints "c"
lassign x y z ;# 返回空
puts $x ;# prints "d"
puts $y ;# prints "e"
puts $z ;# prints ""
lassign x y ;# 返回"h i"
puts $x ;# prints "f"
puts $y ;# prints "g"
tcl tk例項詳解 string(二)
這裡對string命令中的幾個子命令使用例項進行一些解釋,以便於更加容易理解string命令中的各個子命令,本文僅對以下幾個string命令進行例項解析。分別是repeat replace reverse tolower totitle toupper trim trimleft trimright...
tcl tk例項詳解 eval
eval命令本身使用非常簡單,但是用處非常大,如果需要動態的構造命令,那麼必須使用eval命令。eval命令參考 命令格式 evalarg arg 如果是乙個引數,那麼相當於把這個引數當作命令來執行,如果有多個引數,eval命令會把多個引數以concat命令風格連線起來然後再執行命令。舉乙個最簡單的...
tcl tk例項詳解 string(三)
這裡對string命令中的幾個子命令使用例項進行一些解釋,以便於更加容易理解string命令中的各個子命令,本文僅對三個比較複雜的命令進行例項解析。分別是is class map和match三個子命令。string isclass strict?failindexvarname?string 如果s...