標籤:
lesson 13 : 列表命令集
list arg1 arg2 ... 建立一個列表
lindex list index 返回列表 list 中的第 index 個元素(element)值
llength list 計算資料行表 list 元素個數
example ① : 建立一個List ,List的用法
1. set l1 [list Sun Mon Tues]
=>Sun Mon Tues ;#列表 l1 含有三個元素
2. set l2 [list $l1 Wed]
=> {Sun Mon Tues} Wed ;#列表 l2 中含有兩個元素。第一個元素用花括弧括起來。
3. set l3 [list { a $b c} d]
=>{a $b c} d ;#花括弧阻止引用替換
4. set l3 [list "a $b c" d]
=> {a 10 c} d
example ② : llength 命令
llength 命令可以獲得一個列表內元素的個數。
set l1 "1 2 3 4 5"
=>1 2 3 4 5 ;#定義了一個字串
set num [llength $l1] ;#這裡 l1 被看作列表了
=>5
example ③ : lindex的學習
lindex 命令返回列表中指定位置的特定元素。清單索引從 0 開始記數!
%set x { 1 4 5 }
=> 1 4 5
% lindex $x 1
=>4
%lindex $x end
=>5
%lindex $x end-1
=>4
example ④ : split的學習
split 命令的作用與 join 的作用相反,它接收一個字串,並根據給定的字元將其分割轉換成
一個列表。用於分割的字元應該在字串中存在,否則 split 因為沒有搜尋到對應字元而將整個
字串作為唯一列表元素而返回,即返回原字串。
set y [split 7/4/1776 "/"]
puts "We celebrate on the [lindex $y 1]‘th day of the [lindex $y 0]‘th month\n"
// split 是把一個字串 分隔開, 後面的 “/”的分割的字元
example ⑤ : foreach的學習
foreach為遍曆函數 foreach 命令/控制結構會遍曆整個列表,逐次取出列表的每個元素的值放到指定變數中
1. 單個遍曆
set l1 "I am zhou li "
foreach elem $l1 {
puts "---$elem---"
}
=>---I---
---am---
---zhou---
---li---
2.多個遍曆
foreach {x1 x2} {Orange Blue Red Green Black} x3 {Right Left Up Down} {
puts [format "x1=%8s x2=%8s x3=%8s" $x1 $x2 $x3]
}
=> x1= Orange x2= Blue x3= Right
x1= Red x2= Green x3= Left
x1= Black x2= x3= Up
x1= x2= x3= Down
example ⑥ : format的學習
字元 說明
d 有符號整數
u 不帶正負號的整數
i 有符號整數。變元可以是十六進位(0x)或八進位(0)格式
o 無符號八位元
x 或 X 無符號十六進位數
c 將整數映射到對應的 ASCII 字元
s 字串
f 浮點數
e 或 E 科學記號標記法表示的浮點數
g 或 G 以%f 或%e 格式(要短一些)來表示的浮點數
表 4-3 格式標誌符
標誌 說明
- 使欄位靠左對齊
+ 欄位靠右對齊
space 在數字前加一個空格,除非數字帶有前置字元號。這在將許多數字排列在
一起時非常有用
0 使用 0 作為補白
# 前置 0 表示八進位,前置 0x 表示十六進位數。浮點數中總要帶上小數
點。不刪除末尾的 0(%g)
1.
#要取第 2 個變元值,即 5。位置說明符的格式為 2$,並用\來引用符號$:
%set res [format "%2\$s" 1 5 9]
=>5
%puts $res
=>5
%set str [format "%3\$s %1\$s %2\$s" "are" "right" "You"]
=> You are right
2.
%format "%x" 20
=>14 ;# 將 20 轉換為十六進位數
%format "%8x" 20
=> 14 ;# 將 20 轉換為十六進位數,8 位元據寬度,靠右對齊
%format "%08x" 20
=>00000014 ;#與上一命令相似,但用 0 添齊
%format "%-8x" 20
=>14 ;#寬度 8 位,靠左對齊
%format "%#08x" 20
=>0x000014
set x "a b c"
puts "Item 2 of the list {$x} is: [lindex $x 2]\n"
//輸出 list列表中 第二個元素,詳見lindex的用法
set y [split 7/4/1776 "/"]
puts "We celebrate on the [lindex $y 1]‘th day of the [lindex $y 0]‘th month\n"
// split 是把一個字串 分隔開, 後面的 “/”的分割的字元
set z [list puts "arg 2 is $y" ]
puts "A command resembles: $z\n"
set i 0;
foreach j $x {
puts "$j is item number $i in list x"
incr i;
}
fconfigure的學習
fconfigure 命令用來設定或者查詢 I/O 通道的屬性。通道的預設設定對大多數情況來說都是
適用的。如果你是執行事件驅動的 I/O,則可能想將其設定為非阻塞模式
fileevent的學習
#fileevent 命令為 I/O 通道註冊一條命令,當通道變為可讀或可寫的時候該命令被執行
如果 fileevent 命令中沒有 script 參數,則命令返回當前已經註冊的命令,若沒有註冊命令則返回Null 字元串
tcl指令碼學習十三:列表命令集