今天為了改一個 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 的變數介紹
反正書到用時方恨少, 只要程式寫得出來就不想買書了,寫不出來的時候就會想 “下班先去買書"….