字符串的拆分
前言
字符串的處理是每種語言經常會遇到的問題,tcl作為一門腳本語言自然也不例外,關於字符串的拆分,一般會有兩種情況:1.使用單個字符拆分,2.使用字符串拆分。
1.使用單個字符拆分字符串
如圖所示,使用單個字符可以輕松地分割字符串。
2.使用字符串拆分字符串
當我們使用字符串拆分字符串,tcl會使用字符串中的每個字符來拆分,無法達到我們的目的。
這時我們可以定義一個快捷的方法來使用字符串拆分字符串,如下是我新建的一個split.tcl文件的內容:
1 proc OnePiece {str sep} { 2 split [string map [list $sep \0] $str ] \0 3 } 4 set a {RookieSky} 5 set b {ok} 6 set c [OnePiece $a $b] 7 puts $c
接下來我們執行一下這個文件:
從結果中我們可以看出,我們已經成功地使用字符串‘ok’來拆分‘RookieSky’
NICE!!!
原理
1.split string ?splitChars?
根據splitChars變元中的字符分解string,返回一個列表。每個列表元素由string中在splitChars字符之間的字符組成,如果string含有兩個連續的字符與splitChars中的字符相同或者第一或最后一個字符為splitChars中的字符就返回一個空列表元素,如果splitChars是一個空字符串那么string的每一個字符作為單獨的元素組成列表,缺省splitChars為空格符。
2.list ?value value …?
這個命令生成一個list,元素就是所有的value,TCL中list是由一組元素組成的有序集合,list可以嵌套定義,list的每個元素可以是任意字符串,也可以是list。
3.string map ?-nocase? charMap str
返回根據 charMap 中輸入、輸出列表將 str 中的字符進行映射后而產生的新字符串,charMap這個列表中的值我們可以看成{key value key value ...}的映射,str中已經映射過的字符串不會重復映射。
由此我們可以理解為我們寫的方法是將用來拆分的字符串和\0形成一個映射替換后,使用\0來進行拆分。