感谢公众号《IC小迷弟》提供的视频讲解与学习资源,谢谢大哥耐心的讲解!推送内容是对视频讲解的部分整理,关于详细内容,大家可以关注IC小迷弟获取全部学习资料。
正文开启,本次分享的是数组、流控制以及函数部分的笔记与操作实例
Part07Array数组
格式:
操作名为arrayName的数组,option选项决定了执行什么操作。
数组是元素的集合,每一个元素是由自己的名称和值的变量(变量的组成:变量名和变量值)。
数组元素的名称由两部分组成:数组名和数组中的元素名。数组名和元素名都可以是任意类型的字符串。
数组元素使用如month(May)这样的形式,即数组名(此处是month)加上圆括号中的元素名(这里是May)。可以使用简单变量的地方都可以使用数组,例如set命令:
选项option :
(1)、array getarrayName ?pattern?
返回索引与pattern匹配的元素对的列表。列表中奇数个元素是匹配的索引,其后的元素是索引对应的值。如果没有指定pattern,则返回所有元素。如果arrayName不是数组变量的名称,或者没有匹配索引,则返回空列表。
(2)、array names arrayName ?mode? ?pattern?
返回一个包含mode模式下与pattern匹配的数组索引的列表。mode可以是-exact、-glob或-regexp,默认为-glob。如果未指定mode与pattern则返回所有索引。如果没有匹配的索引或者arrayName不是数组变量的名称,则返回空字符串。
返回数组中元素数量,如果arrayName不是数组的名称,则返回0。
Part08 流控制
格式
if expr1 body1 elseif expr2body2 elseif… ?else? ?bodyN?
举个栗子
if { $x<0 } {
…….
} elseif { $x==0 } {
……
} else if { $x==1 } {
……
} else {
……
}
1、需要注意的点是:{一定要在上一行,否则Tcl解析器就会以后if在换行符处已经结束,下一行会被当做新的命令,从而导致解析器报错。
2、if和{之间要有一个空格,否则Tcl解析器会把他们当做一个整体,从而导致报错。
example1:
while test body
test是一个表达式,body是一个脚本,body是一个脚本,如果表达式非0,则运行脚本,知道表达式等于0才停止循环,此时while命令中断,返回一个空字符串。
计算0~100的和:
读取文件(该函数运行环境为DC)
analysis:
set rfile_handle [open “./rpt/pr.rpt” r]
以只读方式打开“./rpt/pr.rpt”文件,将open返回的句柄(fileId)赋值给rfile_handle。
set wfile_handle [open "./rpt/vio.rpt" w]
同上类似,以只写方式打开,如果文件存在,清空文件。
while {![eof $rfile_handle]}
eof即end of file,eof $rfile_hand表示查询是否到达文件的末尾,在未到达文件末尾的情况下执行循环体语句。
gets $rfile_handle line
get fileID line就是读取fileID文件的下一行,忽略换行符,将该行的内容赋值给line
if {[string match"*VIOLATION*" $line]} {
如果line中含有VIOLATION字符
puts wfile_handle line
将string写到fileId中,此处是将上面读到的行信息给只写文件写入
close $rfile_handle
close $wfile_handle
关闭读写文件
格式一:
foreach varname list body
varname是一个变量,list是一个列表,body是循环体
格式二:
foreach varlist1 list1?varlist2 list2…? body
varname是一个变量,list是一个列表,body是循环体
example1:
example2:
第一次把a赋给i,b赋给j,
第二次把c赋给i,d赋给j
第三次把e赋给i,f赋给j
example3:
在下述语句中,分别依次取a列表和b列表中的元素附加在x中,空元素使用{}标识。
同上:
example4
格式:
switch ?options? stringpattern body ?pattern body …?
options表示匹配的方式,switch支持三种匹配方式:
—exact方式(默认)
—glob方式
—regexp方式
example1
example2
Part09 函数
格式(举例说明)
再举个栗子
函数的三种写法
lappend varname value?Value…?把value作为列表元素添加到varName变量中,如果这个变量不存在,就创建它,需要注意的是此处使用list的话不需要$
大括号指定type的缺省值为add,有缺省值的参数后面必须带有缺省值,缺省模式下的参数可以不传递
参数可变型,输入参数个数可变
tcl系列暂时更完,以后再深入学习的话还会继续和大家分享。