前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tcl三部曲(二)、变量与列表

tcl三部曲(二)、变量与列表

作者头像
根究FPGA
发布2020-08-18 16:02:07
1.5K0
发布2020-08-18 16:02:07
举报
文章被收录于专栏:根究FPGA根究FPGA

正文开启,本次分享的是变量与列表部分的笔记与操作实例

Part05变量

属性

1、 无需声明定义,直接使用set进行创建,使用unset进行移除,变量包含变量名和变量值两部分。

2、 使用$进行变量调用

3、 区分大小写

4、 变量名和变量值都可以由任意字符组成,建议使用字母开头,使用字母/下划线+数字进行命名。

5、 常用的变量类型:string、list、array、direction、etc.(字符串、列表、数组、字典)

6、 变量存储类型分为字符串表达形式和内部表达式形式。(整数、实数、数组、列表、tcl脚本etc.)

变量名

变量名由字母数字和下划线构成,遇到非数字、字母、下划线就会停止。

变量之string

如果要把某个简单变量当做字符串处理/看待,可以使用string命令提供的功能!

string命令的格式为:string option arg ?arg..?

(1)、string match ?-nocase? Pattern string

含义:如果Pattern和sting相匹配,返回1,否则返回0,如果开启-nocase选项,则不区分大小写。

使用glob-style方式通配符:

example1:

example2:

vivado运行结果

DC运行结果

可以看到在不同的环境下运行结果存在差异,此处建议采用“{[0-9]}”格式,此处的表示匹配无限长的字符串。

example3:

比较有意思的上述语句的分析,{[a-z][0-9]}使用大括号{},依然被解析成功,这是因为{}的作用时间为替换步骤,在Tcl的命令执行步骤{}失去作用。

(2)、string equal ?-length int? string1 string2 string equal

是对两个字符串进行比较,如果他们严格{-exact}相同(此处的严格相同指的是的长度、字符完全相同,不可含有),返回1,否则返回0。-length可以指定匹配的长度(也就是要比较前多少位)。

当然,也可以使用-nocase忽略比较字符的大小写。

(3)、string compare ?-nocase? ?-length int? string1 string2

对两个字符串进行比较,如果他们严格相同,返回0;如果第一个字符串在字典中先与第二个字符串(第二个字符串更大),返回-1,否则返回1.(-length指定匹配的长度

example:

(4)、string length string

返回字符串的长度,空格、换行符(\n整体算做一个字符)也算一个字符example:

(5)、string index string charIndex

返回string中的第charIndex个字符,charIndex可以为:

—整数n :第n个字符(从0开始,下面简记为0-based)

—end :最后一个字符

—end-整数n:倒数第n个字符【倒序】

如果charIndex小于0或者大于字符串长度,返回空(Null) example:

(6)、string range string first last

与string index string charIndex类似,只不过他需要两个索引,返回的是first到last之间的字符串,如果fisrst小于0按0处理,last类似。

此外当字符串中含有空格等符号时需要使用””弱引用。

example:

(7)、string replace string first last ?newstring?

字符替换与删除,如果first比last大,则不进行替换与删除,使用newstring字符替换first到last位置的字符,如果不存在newstring则将first到last位置的字符删除。

example:

(8)、string map ?-nocase? mapping string

string map ?-nocase?mapping string将string中出现的所有关键字替换成响应的值,置换按顺序进行,转换列表中先出现的先置换,并且只对字符串迭代一次,所以前面的置换不会影响到接下来的匹配查找。

example:

(9)、string trim / trimleft / trimright string ?chars?

裁剪操作,将string开头和结尾出现的要剪裁的字符都删掉。

example:

(10)、string tolower/toupper string ?first? ?last?

从first到last的所有字符都转换成小(大)写,如果未指明first和last则全部转换。

(11)、string totitle string ?first? ?last?

将first到last 位置的字符串转换为标题格式(仅首字母大写) string repeat string count 将string重复count次数

(12)、string reverse string

将string顺序倒过来

Part06列表list

定义

list(列表)是Tcl中频繁使用的数据类型之一,列表中元素的类型可以不相同,数字、字符串、甚至是可以包含列表。

创建列表list的三种方法

与list相关的一些指令

1、llength list

llength list返回list的元素个数

2、lindex ?index…?

lindex ?index…? 检索list中含有index的元素

3、lrange list first last

lrange list firstlast:与lindex类似,只不过他需要两个索引,返回first和last之间的字符串,如果first小于0,则按照0来处理,last类似。

4、linsert list index value

linsert list indexvalue 在指定位置插入新元素,此前该位置的元素向后移动

5、lreplace list first last ?value value…?

lreplace list firstlast ?value value…?将list中从first到last的元素换成0个或多个元素,该指令可以用来替换、删除元素

6、lset varName ?index…? newValue

lset varName ?index…?newValue将变量varName中的index位置的元素改成newValue

7、concat ?list list …?

concat ?listlist …?将不同的list合并成新的list

8、lappend varname value ?Value…?

lappend varname value?Value…?把value作为列表元素添加到varName变量中,如果这个变量不存在,就创建它,需要注意的是此处使用list的话不需要$

9、lrepeat number value ?value?

将value重复number次,得到新的list

10、lassign list varName ?vaeName…?

将list的元素依次赋给名为VarName的变量

如下,将list_a的元素依次赋给x y z

11、jion list ?joinString?

把joinString作为分隔符,把列表元素串接起来,joinString默认为空格

12、split string ?splitCgars?

把string在splitChars处分开

13、lsearch

可使用help lsearch、man lsearch查看。

在list中搜索与pattern匹配的一个或多个元素,option选项控制模式匹配方式(-exact/-glob/-regexp),是返回元素值(-inline)还是索引,是搜索所有的匹配(-all)还是值搜索最先出现的匹配等。

默认使用-glob匹配,返回第一处匹配的索引,没有匹配元素时返回-1。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 与list相关的一些指令
    • 1、llength list
      • 2、lindex ?index…?
        • 3、lrange list first last
          • 4、linsert list index value
            • 5、lreplace list first last ?value value…?
              • 6、lset varName ?index…? newValue
                • 7、concat ?list list …?
                  • 8、lappend varname value ?Value…?
                    • 9、lrepeat number value ?value?
                      • 10、lassign list varName ?vaeName…?
                        • 11、jion list ?joinString?
                          • 12、split string ?splitCgars?
                            • 13、lsearch
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档