1 TCL腳本基本語法(概要)
TCL常用基本語法
一個TCL腳本可以包含一個或多個命令。命令之間必須用換行符或分號隔開。
第一個單詞代表命令名,另外的單詞則是這個命令的參數,用空格或TAB鍵隔開。
變量置換$。
命令置換[]
反斜杠置換\ ,例如set msg multiple\ space ,如果沒有\則有報警。
雙引號將各種分隔符將不作處理,對換行符及$和[]兩種置換符會照常處理。
花括號中所有特殊字符成為普通字符,失去其意義。
註釋符 ‘#’
$符號往後直到第一個不是字母、數字或下劃線的字符之間的單詞符號作為要被置換的變量的名字。
(bin) 28 % set a.1 2
2
(bin) 29 % set b $a.1
1.1
(bin) 30 % set b ${a.1}
2
數組如下:
(bin) 31 % set day(1) 1
1
(bin) 32 % set day(2) 2
2
TCL不能支持復雜的數據類型,不過擴展ITCL填補了這個缺憾。
unset命令可以刪除變量。
6/58
字符串
append將文本加到一個變量的後面
incr命令把變量值加上一個整數。
TCL表達式操作數是整數或實數。0開頭表示八進制,0X開頭表示十六進制
支持加減乘除,移位等操作。
此外expr是TCP的一個命令,
list在TCL中表示集合,可以嵌套定義。
concat命令,把多個list合成一個list.
lindex返回list的第index個0-based元素
llength返回list的元素個數。
linsert返回一個新串,把所有的value參數值插入list的第index個元素之前
lreplace替換第first到第last個元素所有的value參數。
lrange返回list的第first到第last元素組成的串。如果last為end表示到串的最後。
lappend將value值作為一個元素附加到變量varname後面,並返回變量的新值
lsearch返回list中第一個匹配模式pattern的元素的索引,找不到匹配就返回-1.-exact,-glob,-regexp是三種匹配。-exact表示精確匹配,-glob和string match命令匹配方式相同。-regexp表示正規表達式匹配。
lsort這個命令返回把list排序後的串。
Split把string按分隔符splitChars分成一個個單詞。例如split “how.are.you” .
Join是命令的逆。把所有元素合並到一個字符串中,中間以joinString分開。
字符串操作
format格式化類似sprintf函數
set msg [format "%s is %d yearsold" $name $age];
scan命令式format命令的逆,類似於sscanf函數。
regexp用於判斷正規表達式exp是否全部或部分匹配字符串string,匹配返回1,否則0.
resub命令第一個參數是一個整個表達式,第二個參數是一個輸入字符串,這一點和regexp命令完全一樣。匹配返回1,否則返回0,不過regsub用第三個參數來替換字符串string中和正規表達式匹配的部分,第四個參數被認為是一個變量,替換後的字符串存入這個變量中。
String命令具有強大的操作字符串的功能,其中option選項多達20個。
控制流:
If後面的{一定要寫在上一行,如果不這樣TCL解釋器會認為if命令在換行符處已結束,下一行會被當成新的命令,從而導致錯誤的結果。此外if和{之間需要有個空格,否則TCL會把if{當成一個整體,從而導致錯誤。
whiletest body
Test是一個表達式,body是一個腳本,如果表達式的值非0,就運行腳本,直到表達式為0才停止循環。
forinit test reinit body
參數init是一個初始化腳本,第二個參數test是一個表達式,用來決定循環什麽時候中斷,第三個參數reinit是一個重新初始化的腳本,第四個參數body也是腳本,代表循環體。
Foreach命令有兩種語法形式
第一種:foreachvarName list body
第二種:foreachvarlist1 list1 ?varlist2 list2 ..? Body
TCL支持switch命令,支持三種匹配方式:-exact,-glob,-regexp方式
缺省是-glob方式。-regexp是正規表達式的匹配方式。
文件
eval可以接收一個或多個參數,然後把所有的參數以空格隔開組合到一起成為一個腳本,然後對這個腳本進行求值。
source命令讀一個文件並把這個文件的內容作為一個腳本進行求值。
Open命令以access方式打開文件. Open命令返回一個字符串用於表識打開的文件。TCL有三個特定的文件標識:stdin,stdout,stderr.對應標準輸入、標準輸出和錯誤通道。
Gets讀fileid標識的文件下一行,忽略換行符。
Gets類似的命令是read,不過read不是一行為單位。
Puts把string寫到fileid中。
Flush把緩沖區內容寫到filed標識的文件中。
Close關閉標識為filedid的文件。
Tcl提供了seek,tell和eof等命令使用戶可以非連續訪問文件。
TCL提供pwd和cd命令來管理當前工作目錄。
文件操作的第二個命令式file,file有許多選項的常用命令,可以用來進行文件操作也可以檢索文件信息。
過程
Proc命令的第一個參數是你要定義的過程的名字,第二個參數是過程的參數列表,參數之間用空格隔開。
proc add {x y} {expr $x+$y}
定義過程時,可以使用return命令在任何地方返回想要的值。
TCL提供三種特殊的參數形式:
upvar命令使得用戶可以在過程中對全局變量或其他過程中的局部變量進行訪問。
可以理解成綁定變量。
錯誤異常
異常是導致腳本被終止的事件。
很多情況下,錯誤信息提供了足夠的信息指出哪裏以及為什麽發生了錯誤。如果錯誤發生在一組深層套嵌的過程調用中,僅僅給出錯誤信息還不能為指出哪裏發生了錯誤提供足夠信息。為了幫助指出錯誤的位置,當TCL撤銷程序中運行的命令時,創建了一個跟蹤棧,並且把這些跟蹤棧存儲到全局變量errorInfo中。
Catch命令可以俘獲所有的異常,不僅是錯誤。Catch命令的返回值表示是那種情況的異常。
深入
利用array命令可以查詢一個數組變量中已經定義了的元素的信息。
Info命令提供了查看TCL解釋器信息的手段,有超過一打的選項。
例如info exist a
info global
tcl命令提供了trace命令來跟蹤一個或多個變量。
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net
1 TCL腳本基本語法(概要)