一、介绍

列表则是具有特殊解释的字符串。Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构。列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命令字符串。

二、TCL列表相关命令

命令

说明

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 "$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 命令将一个指定区段的列表元素替换为新元素。

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

set x {1 2}
结果=>1 2 set new [linsert $x 0 he she]
结果=>he she 1 2 set new [linsert $x end he she]
结果=>1 2 he she set new [linsert $x 1 he she]
结果=>1 he she 2 puts $x
结果=>1 2 ;# x 的值没有改变 puts $new
结果=>1 he she 2 set y [lreplace $new 1 2 B C]
结果=>1 B C 2 set y [lreplace $new 0 0]
结果=>he she 2 puts $new
结果=>1 he she 2 ;#new 的内容并没有改变,这和 string replace 相同。 set y [lreplace $new 1 2]
结果=>1 2 ;#将第 1、2 个元素删除

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

TCL语言笔记:TCL中的列表操作的更多相关文章

  1. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  2. Python中的列表操作

    Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, ...

  3. 【Python】Python中的列表操作

    Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, ...

  4. python学习笔记(二)列表操作

    列表及列表操作: 列表是最常用的数据类型之一,列表也叫数组,列表定义,使用[]即可:列表里面可以再套列表,一个里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套一个列表,这个叫三位数组,套 ...

  5. JavaWeb学习笔记——jquery中的dom操作

     jquery中的dom操作 废话不说:直接上例子: 1.添加节点-html页面 Append:向每个匹配的元素内部追加内容. <body> <ul id="city& ...

  6. TCL语言笔记:TCL中的数组

    一.介绍 Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念.数组的存取速度要比列表有优势,数组在内部使用散列表来存储 ...

  7. TCL语言笔记:TCL中的数学函数

    一.TCL数学函数列表 函数名 说明 举例 abs(arg) 取绝对值 set a –10  ; #a=-10 set a [expr abs($a)]; # a=10 acos(arg) 反余弦 s ...

  8. TCL语言笔记:TCL中的String命令

    一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...

  9. TCL语言笔记:TCL中的控制结构命令

    一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...

随机推荐

  1. Maven入门指南⑤:使用Nexus搭建Maven私服

    1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则,私服请求外部 ...

  2. Delphi XE5教程7:单元引用和uses 子句

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  3. jvm 数据区划分学习

    Java virtual machine 运行时数据存储区域划分 2015年1月25日 19:15 Pc  寄存器 Each Java Virtual Machine thread has its o ...

  4. 基于WCF的API实现

    本文程序基于VS2013.EF6.1.WCF WCF有2种方式,一是SOAP,一种是Restful 由于程序是基于PCL(可移植类库)的,所以不能用直接引入WCF服务的方式 网上的Restful方式的 ...

  5. 金融系列5《AUTH过程》

    INITIALIZE UPDATE: 在安全通道的显式发起期间,INITIALIZEUPDATE命令用于在卡和主机之间传送卡和会话数据.这个命令开始一个安全通道会话的发起. CPURESET() // ...

  6. Java从入门到精通——调错篇之ORACLE 打开PLSQL时提示ora-01033

    客户Oracle服务器进入PL/SQL Developer时报ora-01033:oracle initializationg or shutdown in progress 错误提示,应用系统无法连 ...

  7. 【转载】MySQL innodb_table_stats表不存在的解决方法

    MySQL 版本 5.6.14 公司有几台MySQL服务器的错误日志显示,有几个系统表不存在.innodb_table_statsinnodb_index_statsslave_master_info ...

  8. c++数组-矩阵的转置

    #include <iostream> using namespace std; int main(){ ][]={{,,},{,,}}; ][]; ;j<;j++){ ;i< ...

  9. android 开发解密时出现pad block corrupted 错误

    情景:在虚拟机上运行正常的,但是到我的真机上就解密失败,出现pad block corrupted  ,据说是版本原因:我机器是小米3 最新版的android  4.2 出现问题的代码: privat ...

  10. 所有的代码生成器都是浮云,如果可以用aspx文件作为模板

    首先申明:标题中的如果是可以去掉的. 想写这篇文章很长时间了,一来是跟大家分享一下,别浪费时间在写代码生成器上面了,什么CodeSmith,XXCodeGenerator等等,都是浮云:二来想跟大家交 ...