前言
Tcl 语言基础
冒号和分号将命令分开;
使用#号进行注释;
一、Tcl 语法之替换
1. 三种变量替换方式:变量替换 $, 命令替换 [], 反斜杠替换 \
set x 10 # 定义变量x,并把x的值赋为10
set y x+100 # y的值是x+100,而不是110
set y $x+100 # y的值是10+100, 也不是110 用了变量替换
set y [expr $x+100] # y的值是110, 用了命令替换
注意:
**1. 变量替换 :**变量名由$后面的所有字母、数字和下划线组成。 遇到 非 字母、数字和下划线就会终止;
set x 10 # 定义变量x,并把x的值赋为10
set y $x # y的值10
set x~ 11 # x~ 的值是11
set y $x~ # y的值是 10~
set y ${x~} # y的值是 11
set a "\$" # 将a设置成“$”, \阻止了$的替换,将$解析成字符$
set a \x48 # 对应\xhh
返回:H 十六进制的48是72,对应字符H
**2. 命令替换:**如果一个单词以字符串{*}
开头,之后紧接着非空白字符, Tcl会移除开头的{*}
,把该单词的剩余部分作为含有单词分隔符的语句进行解析与替换。在替换之后,Tcl会再次解析这些单词,但不进行替换,校验确定他们的确是一个或多个语法完整的单词。如果校验通过,这些单词会被独立地假如命令行进行处理;否则, Tcl会报语法错误。
% glob *v # 查找 .v 文件
返回: a.v b.v c.v 注意这几个文件包含了space
% file delete [glob *v] #想删除所有.v 文件,但是没成功,
% ls
返回: a.v b.v c.v %_command.log
% file delete {*}[glob *v] #加上 {*}, 删除成功
3. 阻止解析器对$和分号等特殊字符进行特殊处理,这些方法称为引用,包括 反斜杠\ ,双引号“”,大括号{}
2. 对于变量:需要注意的
- 无需声明定义, 直接使用set进行创建,unset移除,变量包含变量名和变量值
- 使用$进行调用
- 区分大小写
- 变量名和变量值 都可以由任意字符组成,建议使用字母开头,使用字母/下划线/加数字 进行命名
- 常用的变量类型:string list array directionary, S公司专有的collection
- 变量存储类型 分为 字符串表达形式 和 内部表达形式(整数,实数,名称,列表,Tcl脚本)
2.1 string命令
如果你要把某个简单变量当字符串处理看待,可以使用string命令提供的功能
1. string match
匹配方式使用的是glob-style
string match ?-nocase? Pattern string
如果pattern匹配string,返回1,否则返回0; 如果有-nocase参数,则不许分大小写
2. string equal
-
string equal ?-nocase? ?-length int? string1 string2
对两个字符串进行比较,如果他们严格相同(-exact),返回1,否则0, -length可以指定匹配的长度 -
string compare ?-nocase? ?-length int? string1 string2
对两个字符串进行比较,如果他们严格相同,返回0; 如果第一个字符串 在字典中 先于 第二个字符串,返回-1;否则返回1。 -length可以指定匹配的长度 -
string length string1
返回字符串的长度。 空格,换行符也算一个字符 -
string range string first last
与string index相似,只不过他需要两个索引,返回first到last之间的字符。如果first小于0,则按0处理; last也是类似 -
string index string charlndex
-
string replace string first last ?newstring?
使用newstring替换first到last位置的字符,如果呢我string不存在,则将first到last的字符删除,如果first > last ,则不进行替换- string map ?-nocase? mapping string
将string中出现的所有关键字置换为响应的值。置换的按顺序进行的列表中先出现的关键字先处理。
只对字符串迭代一次,所以前面进行置换的不会影响接下来的匹配查找。
- string map ?-nocase? mapping string
-
string trim string ?chars?
将string开头和结尾出现的要裁剪的字符都删掉; 从两端开始,如果字符是i或d或c,则裁掉。如果是针对字符,而不是字符串idc -
string trimleft string ?chars?
将string开头出现的要裁剪的字符都删掉 -
string trimright string ?chars?
将string开头出现的要裁剪的字符都删掉 -
string tolower string ?first? ?last?
将first到last位置的字符串改成小写 -
string toupper string ?first? ?last?
将first到last位置的字符串改成大写 -
string toupper string ?first? ?last?
将first到last位置的字符串改成标题式格式(首字母大写) -
string repeat string count
-
string reverse string
2.2 list
创建 list 的三种方法
list 相关命令
-
llength list
-
lrange list first last
-
list ?index…?
-
linsert list index value ?value…? list 指定位置插入新元素
-
lset varName ?index…? newValue 将变量varName中的index位置的元素改成newValue
-
lreplace list first last ?value value…? 把list中从first到last的元素换成零个或者多个元素
2.3 search
2.4 array
2.5 expr命令, 基本与verilog相同
二、Tcl的匹配方式
1.三种匹配方式: exact, glob 和正则表达式
严格通配 exact:是指两个字符串必须完全相同,这里不允许通配符出现
想要匹配 "hello world"
exact "hello world" #匹配成功.
exact "hello*" #匹配 失败
glob "hello*" #匹配成功
glob-style的通配方式:
正则表达式如下
三、流控制
1. if 条件控制
- if expr1 body1 elseif expr2 body2 elseif … ?else? ?bodyN?
2. while 循环
- while test body
参数test是一个表达式,body是一个脚本。如果表达式结果为非零,则运行脚本,知道表达式等于零才停止循环。此时while命令中断并返回一个空字符串。
3. foreach
4. switch 相当于verilog中的case
5. break 和continue和C语言一样
四、函数
1. 函数的基本结构
五、文件操作 useful
eof 是判断是否到末端的意思
gets $rfile_handle line 是读出该文件的一行
六、常用命令
source + 脚本 表示可以让脚本吃进
info 判断一个变量的存在
文章来源:https://www.toymoban.com/news/detail-608992.html
七、脚本解读
功能:自动对齐
查找文件最小值:
查找文件最大值:
awk 把第七个元素找出来,元素是以空格隔开的
文章来源地址https://www.toymoban.com/news/detail-608992.html
总结
到了这里,关于TCL 语言基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!