A-A+

TCL使用format創建格式化字符串

2019年08月24日 19:36:50 腳本 暫無評論 閱讀 0 views 次

TCL使用format命令進行字符串的格式化,功能與ANSI C中的sprintf函數相似。例如:

format "The square root of 10 is %.3f" [expr sqrt(10)]

The square root of 10 is 3. 162

format的第一個參數是格式字符串,其中可以包含任意多個像%.3f這樣的轉換符。針對每一個轉換符,format會按照其格式替換後面表達式或參數的值。format基本上支持ANSI C的 sprintf定義的所有轉換符,如%d表示十進制整數,%x表示十六進制整數,%e表示指數形式的實數。

在TCL中 format命令的重要性不像C語言中的printf那樣顯著。很多時候使用 printf和 sprintf就是為了把二進制數值轉化為字符串,從而進行字符串替換操作。Tcl不需要這樣轉化,因為這些值已經存儲為字符串形式了,字符串替換操作可以直接由Tcl解釋器完成。例如以下命令:

set msg [format "%s is %d years old" $name $age]

可以寫成如下更簡潔的形式

set msg "$name is $age years old

format命令中的%d轉換符也可以用%s代替, format會把age的值轉化為二進制整數,然後又會把它轉化為一個字符串。

在Tcl裡使用 format,通常是為了改變一個值的格式,以改善顯示效果,或者把它從某種表現形式改為另一種表現形式(例如上面的例子,從十進制改為十六進制)。作為改變格式的一個示例,下面這段腳本輸出e的前十次幂的列表。

for {set i 1} {$i <= 10} {incr i} {

puts [format "%4d %12.3f" $i [ expr exp($i)]]

}

顯示結果如下:

format的第二項主要用途是改變一個值的表現形式,例如下面的腳本輸出了與特定的整型值對應的ASCI字符。

for {set i 95} {$i <=101} {incr i} {

puts [ format "%4d    %c” $i $i]

}

顯示結果如下:

在format命令中,i的值被使用了兩次,一次是%4d,一次是%c。%c指明讀入整型參數,将其表現形式改為 ASCII中與該整數相對應的字符。

這個示例過程重複使用了i的值,也可以在格式字符串中使用位置符來完成相同的過程。如果%是轉換符,并且緊跟着一個整數和$符号,如%2$d,那麼要轉換的就不是下一個參數了,而是由這個數字代表的參數,這裡1代表的是第一個參數。有了位置符,就可以把同一個參數使用任意次。然而,隻要格式字符串中有一個轉換符使用了位置符,那麼所有的轉換符都必須使用位置符。下面這個過程輸出的結果與前面的腳本相同:

for {set i 95} {$i <= 101} {incr i} {

puts [format "%1$4d    %1$c" $i]

}

本站微信公衆賬号,歡迎關注,如有問題可在下方留言也可在公衆賬号提問。

微信公衆賬号
标簽:

給我留言