[TCL]Tcl语言基礎教程(二)
Tcl语言参考(二)
二、Tcl变量数据类型
Tcl只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。(然而字符串的实际解释是依赖于其所处上下文。它有三种形式:命令, 表达式和表)。Tcl变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。
(1)简单变量
一个Tcl的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按C\C++语言中标识符的命名规则命名。这是因为Tcl解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:
set a 2set a.1 5set b $a.1
在最后一个命令行,我们希望把变量a.1的值付给b,但是Tcl解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以Tcl解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。例如:
set b ${a.1}
(2)数组变量
数组是一些元素的集合。Tcl的数组和一般编程语言中的数组有很大的区别。在Tcl中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,Tcl中数组元素的名字(下标〕可以为任何字符串。例如:
set day(monday) 1set day(tuesday) 2
(3)重用结构及其操作
1、string结构及其操作
因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能
【format】语法:
format formatstring vlue value...
format命令类似于ANSIC中的sprintf函数,它按formatstring提供的格式,把各个value的值组合到formatstring中形成一个新字符串,并返回。例如:
set msg [format "%s is %d years old" $name $age]
【scab】语法:
scan string formatsting varName varName ...
scan命令可以认为是format命令的逆,其功能类似于ANSI C中的sscanf函数。它按formatsting提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和formatsting中的字符和'%'必须匹配。例如:
scan "some 26 34" "some %d %d" a b
【regexp】语法:
regexp [switchs] [--] exp string [matchVar]\ [subMatchVar subMatchVar...]
regexp命令用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0。regexp可以设置一些开关(switchs〕,来控制匹配的具体方式,如:-nocase,-line等,其中-- 表示这后面再没有开关(switchs〕了,即使后面有以'-'开头的参数也被当作正规表达式的一部分。 如果regexp命令后面有参数matchVar和subMatchVar,则所有的参数被当作变量名,如果变量不存在,就会被生成。 regexp把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给第二个变量,依次类推,例如:
regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word 1puts " $total ,$num,$word"
显示结果为:100 apples ,100,apples
其他具体的正则表达式规则请参考Tcl语言手册
【regsub】语法:
regsub [switchs] exp string subSpec varname
regsub的第一个参数是一个整个表达式,第二个参数是一个输入字符串,这一点和regexp命令完全一样,也是当匹配时返回1,否则返回0。不过regsub用第三个参数的值来替换字符串string中和正规表达式匹配的部分,第四个参数被认为是一个变量,替换后的字符串存入这个变量中。例如:
regsub there "They live there lives " their xputs $x
显示结果为:They live their lives
【sting】语法:
string subcmd arg [arg...]
string命令具有强大的操作字符串的功能,并通过其中的subcmd来区别具体将要执行的string操作。他们中的一些如下:
string length stringstring range string first laststring index string charIndexstring tolower string [first] [last]string replace string first last [newstring]string equal [-nocase] [-length int] string1 string2string match [-nocase] pattern string 如果pattern 匹配string,那么返回1,否则返回0.string compare [-nocase] [-length int] string1 string2 如果有 -length 参数,那么只比较前 int 个字符string first string1 string2 [startindex] 在string2 中从头查找与string1匹配的字符序列,如果找到,那么就返回匹配的第一
个字母所在的位置(0-based)。如果没有找到,那么返回-1。string trim string [chars] 返回值为:从string字符串的首尾删除掉了字符集合chars中的字符后的字符串。如果没有给出chars,那
么将删除掉spaces、tabs、newlines、carriage returns这些字符.
2、list结构及其操作
list这个概念在TCL中是用来表示集合的。TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list每个元素可以是任意字符串,也可以是list。Tcl提供了很多基本命令对list进行操作:
【list】语法:
list [ value value...]
这个命令生成一个list,list的元素就是所有的value
【concat】语法:
concat list [list...]
这个命令把多个list合成一个list.
【llength】语法:
llength list
返回list的元素个数。
【lindex】语法:
lindex list index
返回list的第index个(0-based)元素。
【lrange】语法:
lrange list first last
返回list的第first (0-based)到第last (0-based)元素组成的串,如果last的值是end。就是从第first个直到串的最后。
【linsert】语法:
linsert list index value [value...?]
返回一个新串,新串是把所有的value参数值插入list的第index个(0-based)元素之前得到。
【lappend】语法:
lappend varname value [value...?]
把每个value的值作为一个元素附加到变量varname后面,并返回变量的新值,如果varname不存在,就生成这个变量。
【lreplace】语法:
lreplace list first last [value value ...]
返回一个新串,新串是把list的第firs (0-based)t到第last 个(0-based)元素用所有的value参数替换得到的。如果没有value参数,就表示删除第first到第last个元素。
【lsort】语法:
lsort [options?] list
这个命令返回把list排序后的串。options可以是如下值:
-ascii 按ASCII字符的顺序排序比较.这是缺省情况。
-dictionary 按字典排序,与-ascii不同的地方是:
(1)不考虑大小写
(2)如果元素中有数字的话,数字被当作整数来排序.
【lsearch】语法:
lsearch [-option] list pattern
返回list中第一个匹配模式pattern的元素的索引,如果找不到匹配就返回-1。option取-exact、-glob、 -regexp是三种模式匹配的技术,缺省时使用-glob匹配。
【join】语法:
join list [joinString]
这个命令把list的所有元素合并到一个字符串中,中间以joinString分开。缺省的joinString是空格。
【split】语法:
split string [splitChars]
把字符串string按分隔符splitChars分成一个个单词,返回由这些单词组成的串。如果splitChars 是一个空字符{},string被按字符分开。如果splitChars没有给出,以空格为分隔符。
3、file结构及其操作
TCL提供了丰富的文件操作的命令。通过这些命令你可以对文件名进行操作(查找匹配某一模式的文件)、以顺序或随机方式读写文件、检索系统保留的文件信息(如最后访问时间)。
3.1基本文件I/O
pwd和UNIX下的pwd命令完全一样, 没有参数,返回当前目录的完整路径。
cd 命令也和UNIX命令也一样,使用一个参数,可以把工作目录改变为参数提供的目录。
以下这个名为tgrep的过程,可以说明TCL文件I/O的基本特点:
proc tgrep { pattern filename} {set f [open $filename r]while { [gets $f line ] } {if {[regexp $pattern $line]} {puts stdout $line}}close $f}
open命令返回一个字符串用于表识打开的文件。当调用别的命令(如:gets,puts,close,〕对打开的文件进行操作时,就可以使用这个文件标识符。TCL有三个特定的文件标识: stdin,stdout和stderr ,分别对应标准输入、标准输出和错误通道,任何时候你都可以使用这三个文件标识。
3.2随即文件访问
默认文件输入输出方式是连续的:即每个gets或 read命令返回的是上次gets或 read访问位置后面的字节,每个puts命令写数据是接着上次puts写的位置接着写。TCL提供了seek,tell和eof等命令使用户可以非连续访问文件。每个打开的打开文件都有访问点,即下次读写开始的位置。文件打开时,访问点总是被设置为文件的开头或结尾,这取决于打开文件时使用的访问模式。每次读写后访问位置按访问的字节数后移相应的位数。
seek fileId offset [origin] 把fileId标识的文件的访问点设置为相对于origin偏移量为offset的位置。origin可以是start,current,
end,默认是start。
tell fileId 返回fileId标识的文件的当前访问位置。
eof fileId 如果到达fileId标识的文件的末尾返回1,否则返回0。
3.3文件操作和获取文件信息
【grob】语法:
glob [switches] pattern [pattern ...]glob命令的模式采用string match命令的匹配规则,返回匹配这个(些)模式的所有文件的列表。如:glob *.c *.hglob */ 只返回当前目录的所有子目录。
【file】语法:
file subcmd arg [arg...]file 通过众多的subcmd子操作提供强大的文件操作和访问能力。他们中的一些如下:file exists namefile extension namefile mkdir dir [dir ...]file copy [-force] [--] source targetfile rename [-force] [--] source targetfile delete [-force] [--] pathname [pathname ... ]
[TCL]Tcl语言基礎教程(二)相关推荐
- [TCL]Tcl语言基礎教程(三)
Tcl语言参考(三) 三.Tcl表达式 (1)操作数 Tcl表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果 ...
- c语言类似于 n的标识符,C语言快速入门教程(二)
C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要: 单词 + 语法! 将单词按照一定的语法拼凑起来就成 ...
- TCL脚本语言光速入门教程,一篇就够了(超全查表)
目录 引子:初见TCL 基本命令 置换命令 普通置换 变量置换 命令置换 反斜杠置换 其他置换 脚步命令 eval命令 source命令 语言命令 简单变量 数组变量 重构变量及其操作 补充概念 全局 ...
- pytorch操作基礎(二)——基礎
深度學習(二)--基礎 搭建好了pytorch後先不急着操作,先了解神經網絡是一件很重要的事情. pytorch基礎 -Tensor 即張量,表示多維的矩陣,pytorch裏面處理的單位就是一個個張量 ...
- EDA实验课课程笔记(三)——TCL脚本语言的学习1
本文参考资料为<Tcl语言教程>,感谢作者的分享,这里仅仅作为简单常用语法的入门,若有需要后期对本文进行添加补充. EDA实验课课程笔记(三)--TCL脚本语言的学习 前言(TCL综述) ...
- tcl计算机语言,Vivado之TCL脚本语言基本语法介绍
TCL脚本语言 Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了TCL命令行.最近发现TCL脚本貌似比GUI下操 ...
- Vivado中的TCL脚本语言
本文介绍了Tcl在Vivado中的基础应用,希望起到抛砖引玉的作用,指引使用者在短时间内快速掌握相关技巧,更好地发挥Vivado在FPGA设计中的优势. Vivado TCL脚本语言 使用Tcl作为它 ...
- 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc
计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...
- EDA实验课课程笔记(四)——TCL脚本语言的学习2
EDA实验课课程笔记(四)--TCL脚本语言的学习2 控制流 if 循环命令 while for foreach break和continue命令 switch source 过程(procedure ...
最新文章
- 二叉树的前序,中序,后序的递归、迭代实现
- LeetCode Lowest Common Ancestor of a Binary Tree(LCA问题)
- jquery图片幻灯片(小图列表,大图展示)
- 【每周CV论文推荐】 初学深度学习单张图像三维人脸重建需要读的文章
- 达不达标的公式计算机,“我面试了几十个大学生都不达标,连这3个Excel公式都看不懂”...
- java nio与io_Java NIO和IO的区别(转)
- ZooKeeper Watcher注意事项
- 多线程之线程通信条件Condition
- 整合Arm处理器与SSD的NGD运算型储存装置
- 微信小程序图片上传以及剪切(image-cropper的简单使用)
- 股票指标(摘自同花顺软件)
- c语言获取系统时间精确到毫秒,如何获取系统流逝时间(要求精确到毫秒)
- 【科学文献计量】关键词的挖掘与可视化
- 物联网智慧物流平台开发
- idea 创建springboot项目的资源文件application.yml的图标显示不正常
- 出场、入场动画大全,基于NineOldAndroids轻松实现动画效果
- c盘空间不足的一些删除办法
- Hibernate 3.6.10 jar包下载链接
- PCIe系列专题之二:2.3 TLP结构解析
- wfp例子inspect说明