close

近來又得重新投入 Tcl Script 的懷抱,花了幾天重新複習了一下,手感也慢慢地回來了。透過幾天的溫習,順手做個紀錄

Variable : set / unset command

% set var 5  ;# 設定變數 var 的 vlaue 為 5
5 
% puts $var  ;# 列印變數 var
5 
% unset var  ;# 刪除變數 var
% puts $var  ;# 列印變數 var, 因為不存在所以出現錯誤訊息 Can't read "var": no such variable
can't read "var": no such variable

Command Substitution

% set len [string length test123]   ;# 將 [string length test123] 的結果設定到變數 len
7

上面範例中的 [string length test123] 稱為 nested command,透過 [ ] 做區分。nested command 可支援多階層(參考下面 expr command 範例),但考量到程式的可讀性,個人建議約 3~4 階層。

Math Expressions : expr command

% set xylist [list  [list 10 20] [list 30 40]]
{10 20} {30 40}
% set distance [expr 100 - [lindex [lindex $xylist 0] 1]]  ;#nested command example
80

另外,整數與浮點數的分別是透過"是否有加小數"來做區分,如下面犯列說明

% expr 1/3  ;# 被除數和除數皆為整數,會得到一個整數的結果
0
% expr 1/3.0 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果
0.333333333333
% expr 1.0 /3 ;# 若被除數或除數之中有一個浮點數,則會得到一個浮點數的結果
0.333333333333

若有精度(取小數點以下幾位)的需求,則可以透過 tcl_precision 這個變數來定義。請參閱下列範例

% expr 1 / 3.0
0.333333333333
% set tcl_precision 3 ;# 將精度設為小數點下三位
3
% expr 1 / 3.0
0.333
% 

Backslash Substitution

Backslash, "\", 反斜線,這個符號再 tcl script 中有兩種使用方式;一種是用來顯示特殊字元,另外一種則用來分割太長的單行指令或增加程式的可讀性。

% set var 123
123
% puts "\$var = $var"
$var = 123
% set mathGrade [list [list Arthur 100] \
               [list Emily 99 ]  \
              [list Merisa 98 ] \
              [list sean 80 ]]
{Arthur 100} {Emily 99} {Merisa 98} {sean 80}
% 

Double Quotes  and  Brace

Double Quotes 雙引號 ( " ) 與 Brace 大括號 ( { } ) 都是用來將文字組合成字串。兩者主要的差別在於 double quotes 中間的字串是允取 command subsitution, 但 brace 中間的字串是不被允許 command subsitution.  若 { } 位於   " " 之間使用,則 { } 原本的功能將被關閉。使用者可以透過兩者的特性來完成想要達到的功能。

% set str "Hello the world!!"
Hello the world!!
% puts "The length of \"$str\" is [string length $str]" ;# 透過 neted command 來計算 str 字串的長度
The length of "Hello the world!!" is 17
% puts {The length of \"$str\" is [string length $str]} ;# 大括號中的所有字元都會被完整的列印出來
The length of \"$str\" is [string length $str]
% puts "foo {$two} XXX"
foo {2.0} XXX

Procedures : proc command

副程式,透過 proc 這個指令來定義.如下面的範例說明

proc Diag { a b } {   ;# 副程式 Diag, 共有兩個輸入參數 
   set c [expr {sqrt($a * $a + $b * $b )}]
   return $c ;# 將計算完的結果回傳
}
set x [ Diag 5 10 ] ;# 透過 Diag 副程式計算 5^2 + 10^2 並將結果回傳到 x 變數

 

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ccchiu 的頭像
    ccchiu

    Arthur叔叔

    ccchiu 發表在 痞客邦 留言(0) 人氣()