tcl三部曲(三)、数组、流控制与函数
感谢公众号《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不是数组变量的名称,则返回空字符串。
(3)、array size 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
格式
while test body
test是一个表达式,body是一个脚本,body是一个脚本,如果表达式非0,则运行脚本,知道表达式等于0才停止循环,此时while命令中断,返回一个空字符串。
example1
计算0~100的和:
example2
读取文件(该函数运行环境为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
格式一:
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
格式:
switch ?options? stringpattern body ?pattern body …?
options表示匹配的方式,switch支持三种匹配方式:
—exact方式(默认)
—glob方式
—regexp方式
example1
example2
Part09 函数
格式(举例说明)
再举个栗子
函数的三种写法
lappend varname value?Value…?把value作为列表元素添加到varName变量中,如果这个变量不存在,就创建它,需要注意的是此处使用list的话不需要$
第一种
第二种
大括号指定type的缺省值为add,有缺省值的参数后面必须带有缺省值,缺省模式下的参数可以不传递
第三种
参数可变型,输入参数个数可变
tcl系列暂时更完,以后再深入学习的话还会继续和大家分享。
- Nginx 反向代理解决前后端联调跨域问题
- JavaScript对象length
- Go1.8.4和Go1.9.1版本发布
- Javascript数组操作
- Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
- jQuery VS JavaScript原生API
- 居于H5的多文件、大文件、多线程上传解决方案
- 抛弃websocket,前端直接打通信道,webRTC搭建音视频聊天
- Golang学习-第三篇 认识Web框架
- Golang学习-第二篇 搭建一个简单的Go Web服务器
- 数据说话:Go语言的Switch和Map性能实测
- Dora.Interception, 为.NET Core度身打造的AOP框架[4]:演示几个典型应用
- Dora.Interception, 为.NET Core度身打造的AOP框架[3]:Interceptor的注册
- Dora.Interception, 为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hackbar 2.3.1插件许可证限制绕过
- Linux系统下安装JDK
- MATLAB借助openai gym环境训练强化学习模型
- java作业篇,闰年,BMI
- 主题hondsome折腾,css修改
- typecho显示网站运行时间
- 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
- 为什么非对称加密比对称加密慢?
- 如何优化Nginx的处理性能
- 一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了
- 各类好玩免费API推荐,强烈建议收藏
- 回敬Python蹭女神热度助发朋友圈,Java实现头像分成九宫图,再生成拼图头像
- java作业:实现数组翻转
- windows下搭建spark测试环境
- 微信小程序实时语音识别实践