tcl脚本学习十三:列表命令集

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 参数,则命令返回当前已经注册的命令,若没有注册命令则返回空字符串

时间: 2024-08-04 14:16:18

tcl脚本学习十三:列表命令集的相关文章

tcl脚本学习十:proc 子函数的使用

lesson 10 :proc 子函数的使用 1. proc sum {arg1 arg2} { set x [expr $arg1+$arg2]; return $x } puts " The sum of 2 + 3 is: [sum 2 3]\n\n" //[语法] :proc procName { var1 var2 ... } {body}说明:1. proc 命令有三个参数:procName 是定义的过程名字:{var1 var2 ...}是输入.输出参数列表:body 是

tcl脚本学习十一:proc应用 (带默认参数)

lesson 11 : proc应用 (带默认参数) 1.//使用过程的时候,不一定输入所有的参数值.过程的输入参数可以有默认值.默认值由{默认参数名 默认值}指定.如果调用过程时没有指定这些参数的值则会使用其默认值,否则使用输入值来替代默认值.在使用默认参数的时候要注意,如果默认参数之后还有非默认参数,则在调用此过程的时候,默认参数的值也要求输入,否则会出错.这是因为 Tcl 调用过程的时候是根据位置来匹配参数和输入值的2.如果参数列表中最后一个参数是 args 的话,则过程可以接收可变数目的

tcl脚本学习八:while循环的使用

lesson8 :while循环的使用 1. set x 1;while {$x < 5} { puts "x is $x"; set x [expr $x + 1] }//tcl里面的while 记得以{结束第一行,原因是告诉编译器这段话没结束 2. set x 0;while "$x < 5" { set x [expr $x + 1] if {$x > 7} break; if "$x > 3" continue;

tcl脚本学习七:if的学习

lesson 7 : if的学习 1. set x 1; if {$x == 2} {puts "$x is 2"} else {puts "$x is not 2"} if {$x != 1} { puts "$x is != 1" } else { puts "$x is 1" }//if的基本用法 2. if $x==1 {puts "GOT 1"}//可以if里面的判断语句可以不加括号 3. set

tcl脚本学习九:for循环的学习

lesson9 :for循环的学习 for {puts "Start"; set i 0} {$i < 2} {incr i; puts "I after incr: $i"; } { puts "I inside first loop: $i" } //和c一样 有三个条件 ;# Because the test is evaluated before the body,;# this loop won't execute the bod

tcl脚本学习二:特殊符号学习

lesson 2 :特殊符号学习 ! example ① : set Z "zhou li "set Z_LABEL "boy " puts "$Z_LABEL $Z"puts "$Z_LABEL \$Z" // 可通过 \将特殊符号输出,和C语言一样 example ② : 1. puts "\nI have $100.00 bill"//如果这样会报错 :提示100.00非法 ps: \n是换行 2.

tcl脚本学习一 :熟悉tcl代码风格

set X "this is a boy "set Y "zhouli "puts $Xputs $Y set label "the value in Y is: " puts "$label $Y" // 总结 : 1. #注释2. tcl不支持.net中的形如int , double ,char等等类型,唯一支持的就是string类型3. 变量:在tcl变量不需要声明就可以直接赋值4. 取得变量的值可以在对应的变量名前面加

tcl脚本学习五:基本运算

lesson 5 :基本数学计算 1. set X 100;set Y 256;set Z [expr "$Y + $X"]//亦可以写成 set Z [expr {$Y +$X}] 2. set Z_LABEL "$Y plus $X is "puts "$Z_LABEL $Z"puts "The square root of $Y is [expr sqrt($Y)]\n"//求开方的算式 expr 外面一般要带上[]作为

tcl脚本学习四: [] ,“” ,{} 的学习以及嵌套使用

lesson 4 1. set x "abc"puts "A simple substitution: $x\n"//简单的例子 2. set y [set x "def"]puts "Remember that set returns the new value of the variable: X: $x Y: $y\n"//当使用[]的时候,会将 []内的返回值作为y所定义的值 3. set z {[set x &quo