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
"
// 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]
"
//输出 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
"
// split 是把一个字符串 分隔开, 后面的 “/”的分割的字符
set z [list puts "arg 2 is $y" ]
puts "A command resembles: $z
"
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 参数,则命令返回当前已经注册的命令,若没有注册命令则返回空字符串