字元串的拆分
- 前言
-
- 使用單個字元拆分字元串
- 使用字元串拆分字元串
- 原理
前言
字元串的處理是每種語言經常會遇到的問題,tcl作為一門腳本語言自然也不例外,關于字元串的拆分,一般會有兩種情況: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來進行拆分。