tcl脚本中list(列表的用法)附举例说明

首先贴一下常见的命令

命令说明
list arg1 arg2 …创建一个列表
lindex list index返回列表 list 中的第 index 个元素(element)值
llength list计算列表 list 元素个数
lrange list index1 index2返回指定范围内(从 index1 到 index2)的元素
lappend list arg1 arg2 …将新元素追加到原来列表 list 后组成新的列表
linsert list index arg1 arg2 …将新元素插入到 list 中位于 index 元素之前的位置上
lreplace list index1 index2 arg1 arg2 …替换指定范围的元素
lsearch ?mode? list value根据匹配模式 mode,查找 list 中与 value 匹配的元素位置索引。mode 一般为-exact、-glob 和regexp.默认为-glob。找不到返回-1。
lsort ?switches? list根据 开关选项对列表进行排序
concat list1 list2 …连接多个列表内容成一个列表
join list joinChars以 joinChars 为分隔符将列表中的元素合并在一起
split string splitChars以 splitChars 中的字符作为分隔符将字符串分解为列表元素。
foreach var list {proc body}遍历列表各项,逐次将各元素值存入 var 中并执行 proc body。相当于一个循环控制语句。

1.list 命令

list 命令用来创建列表。一个列表可以包含子列表,即列表可以嵌套。

set l1 [list Sun Mon Tues]
结果=>Sun Mon Tues

set l2 [list $l1 Wed] ;#列表 l1 含有三个元素
结果=> {Sun Mon Tues} Wed

set str1 “Sun Mon Tues”
结果=>Sun Mon Tues

set l2 [list $str1 Wed] ;#列表 l2 中含有两个元素。第一个元素用花括号括起来。
结果=>{Sun Mon Tues} Wed ;#和上面的命令结果相同:“列表是特殊的字符串”。
2.concat 命令

concat 命令以空格为分隔符将多个列表拼装在一起形成新的列表。它和双引号的作用比较相似。

set x {1 2}
结果=> 1 2

set y "KaTeX parse error: Expected 'EOF', got '#' at position 9: x 3 " ; #̲x 被替换后,作为列表结构的花括号被去掉,
结果=> 1 2 3 ; #元素被提出来和 3 一起作为新列表的元素

set y “$x {3}”
结果=> 1 2 {3}

set y [concat $x 3] ;#结果同上面的双引号
结果=> 1 2 3

set y [concat $x {3}]
结果=> 1 2 3
3.lindex 命令

lindex 命令返回列表中指定位置的特定元素。列表索引从 0 开始记数!

set x { 1 2 3 }
结果=> 1 2 3

puts [lindex $x 1]
=>2
4.llength 命令

llength 命令可以获得一个列表内元素的个数。

set length “1 2 3 4 5”
结果=>1 2 3 4 5 ;#定义了一个字符串
set num [llength $l1] ;#这里 l1 被看作列表了
=>5
5.lrange 命令

lrange 命令返回一个指定区段的列表元素,可以以 end 或者 end-n 作为索引(n 为正整数)。

lrange {1 2 3 {4 5} 6} 2 end
结果=> 3 {4 5} 6
6.linsert 和 lreplace 命令

linsert 命令用来将元素插入到一个列表的由索引指定的位置。如果索引为 0 或者更小,则元素就会被添加到最前面。如果索引值大于或者等于列表长度,则元素被追加到列表尾部。

其他情况元素被添加到指定位置之前。 lreplace 命令将一个指定区段的列表元素替换为新元素。

如果没有指定新元素,则这个区域的元素就会被从列表中删除。注意:这两个操作不会改变原来列表的内容,而是返回一个新列表。

View Code
7.lsearch 命令

lsearch 命令在给定列表中搜索与匹配字符串匹配的元素,成功就返回正确的元素索引,否则返回-1。lsearch 支持通配符格式,但可以使用-exact 选项将其屏蔽而进行精确匹配。

set l1 [list This is one list]
结果=> This is one list

set index [lsearch $l1 l*]
结果=> 3

set index [lsearch -exact $l1 l*]
结果=>-1

set index [lsearch -exact $l1 list]
结果=>3
8.lsort 命令

lsort 命令实现对列表的排序。排序操作不影响原表,而是返回排序之后的新表。

set list “a Z z n100 n200 M p Hl hL m 1 20”
结果=>a Z z n100 n200 M p Hl hL m 1 20

lsort -ascii $list
结果=>1 20 Hl M Z a hL m n100 n200 p z

lsort -dictionary $list
结果=>1 20 a Hl hL M m n100 n200 p Z z
9. join 与 split 命令

join 命令接收一个列表,并用指定的分隔符将列表元素整合成一个字符串

join {1 {2 3} {4 5 6}} :
结果=> 1:2 3:4 5 6
split 命令的作用与 join 的作用相反,它接收一个字符串,并根据给定的字符将其分割转换成

一个列表。

set str cm8/auto/tools/aries/ASAM/NE/SNMP/IMPL/ne_create_board.tcl
结果=>cm8/auto/tools/aries/ASAM/NE/SNMP/IMPL/ne_create_board.tcl
set s /
结果=>/

set l1 [split $str $s]
结果=> cm8 auto tools aries ASAM NE SNMP IMPL ne_create_board.tcl

set l2 [split $str “/.”] ;#可以指定多个分割符
结果=> cm8 auto tools aries ASAM NE SNMP IMPL ne_create_board tcl
10.foreach 控制结构

foreach 命令/控制结构会遍历整个列表,逐次取出列表的每个元素的值放到指定变量中,使用者可以在跟随的过程体中添加必要的处理过程。

set lst “1 2 3 4”
结果是=>1 2 3 4

foreach l1 $lst {
puts $l1
}
结果是=>
1
2
3
4
例子:将一个
首先清空2个变量这2个变量是用来存放我们写出来的东西

set CPU_MEM_LIBRARY_FILES_1P0V_BC ""
set TOP_MEM_LIBRARY_FILES_1P0V_BC ""

string length判断我们的字符串的长度
string equal -length $mem_length $mem $set_mem判断2个字符串的前mem_length位是否相等
如果判断成功我们将成功的值放入到一个变量中,
如果mem中所有的值都判断不成功,那么我们把他放入到另一个变量中
但是这里我不知道怎么将list中的一个量给删除,所以用了计次的方法计算32次(因为有32个值,mem中)

##build________TOP_MEM_LIBRARY_FILES_1P0V_BC
foreach mem $mem_list  {
foreach set_mem  $MEM_LIBRARY_FILES_1P0V_BC {
set mem_length [string length $mem]
set results [string equal -length $mem_length  $mem $set_mem]
if {$results == 1} {
lappend TOP_MEM_LIBRARY_FILES_1P0V_BC $set_mem
}
}
}
##build________CPU_MEM_LIBRARY_FILES_1P0V_BC
set i 32
foreach set_mem $MEM_LIBRARY_FILES_1P0V_BC  {
foreach mem  $mem_list {
set mem_length [string length $mem]
set results [string equal -length $mem_length  $mem $set_mem]
if {$results == 0} {
set i [expr $i - 1]
#lappend CPU_MEM_LIBRARY_FILES_1P0V_BC $set_mem
}
}
if {$i == 0} {
lappend CPU_MEM_LIBRARY_FILES_1P0V_BC $set_mem
} else {
}
set i 32
}
  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值