天天看點

Tcl/Tk語言學習------拆分字元串前言原理

字元串的拆分

  • 前言
    • 使用單個字元拆分字元串
    • 使用字元串拆分字元串
  • 原理

前言

字元串的處理是每種語言經常會遇到的問題,tcl作為一門腳本語言自然也不例外,關于字元串的拆分,一般會有兩種情況:1.使用單個字元拆分,2.使用字元串拆分。

使用單個字元拆分字元串

如圖所示,使用單個字元可以輕松地分割字元串。

Tcl/Tk語言學習------拆分字元串前言原理

使用字元串拆分字元串

當我們使用字元串拆分字元串,tcl會使用字元串中的每個字元來拆分,無法達到我們的目的。

Tcl/Tk語言學習------拆分字元串前言原理

這時我們可以定義一個快捷的方法來使用字元串拆分字元串,如下是我建立的一個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
           

接下來我們執行一下這個檔案:

Tcl/Tk語言學習------拆分字元串前言原理

從結果中我們可以看出,我們已經成功地使用字元串‘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來進行拆分。