TCL 小心得

今天為了改一個 TCL 檔, 用了很多新的東西. 因為從來沒有從 TCL 的基本學起, 所以還是摸索了一下. 簡單整理今天遇到的困擾:

1. 最常出現的 bug:  把 if { …. } 寫成 if ( …. ), 常常一眼看不出來.

2. 對 list 的觀念不清. Parsing 到有花括號 { 的檔案, 用 lsearch, lreplace 都會出問題. 首先將 list 做 split

      set newlist [split $line]  

   這樣 line 裡面的 tab, {, 都會變成 list, 這個時候 newlist 就可以被 lsearch, lreplace 了

3. 但是從 split 過的 newlist 裡面找到的位置, 並不代表它在 line 裡面的位置. 不做 split 好像又不能 parse 有花括號的檔案. 所以我用了一個蠢方法. 第一道先 lsearch $newlist, 等到確定有我要的字串, 再改用 lsearch $line.

4. 十進位數字轉十六進位數字

   set hexspace [format %x $space]  

   但 TCL 並不會自動幫我們加 0x~ 以資區別. 所以我還是手動把它加上去.

   set space “0x"
   append space $hexspace

5. lrange 格式

   lrange $line 1 3  表示把第一個到第三個 element 都做成一個 list

   lreplace 類似 lrange 但多出一到多個 element, 取到代第一個到第三個

   若 lreplace first last …. 的 first < last 它就變成 insert 功\能

6. /t 表示 tab,  但 puts $File “tabc" 並不會印出 tab, puts $File t"abc" 才會

7. 該用 append 不要混淆成 lappend, 兩者不同

  append “a" “b" —> “ab"

  lappend “a" “b" —> “a {b}"

8 需要數學計算時用 expr, 如; set a [expr c * b], 這表示 a = c * b

大概就是這樣了. 有用的網址如下:

http://tmml.sourceforge.net/doc/tcl/

http://tmml.sourceforge.net/doc/tcl/keyword-index.html#KW-index 

http://www.dev.idv.tw:8080/mediawiki/index.php/Tcl%E7%9A%84%E8%AE%8A%E6%95%B8%E4%BB%8B%E7%B4%B9 TCL 的變數介紹

反正書到用時方恨少, 只要程式寫得出來就不想買書了,寫不出來的時候就會想 “下班先去買書"….

發表留言