(接上一篇)http://t.csdnimg.cn/eChQlhttp://t.csdnimg.cn/eChQl
目录
三、控制流
- if 条件判断语句
新建test.tcl文件,写入以下内容:
set a 3
set b 2
if {$a > $b} {
puts $a
} else {
puts $b
}
注意事项:‘{’一定要写在上一行,否则TCL解释器会将其当作下一行的新命令,从而导致错误
然后在terminal中输入以下命令,就可得到结果3。
tclsh test.tcl
-
foreach 循环控制指令
foreach 变量 列表 循环主体
从第0个元素开始,顺序取得列表的一个元素,将其赋值给变量,执行循环主体一次。
set list {1 2 3}
foreach i $list {
puts $i
}
程序执行过程为:将列表中的第0个元素1赋值给i,进入循环,打印i值为1;将列表中的第1个元素赋值给i,……
- break 循环结束指令
set list {1 2 3}
foreach i $list {
if {$i == 2} {
break
}
puts $i
}
当i为2时,跳出foreach循环
- continue 退出本次循环指令
set list {1 2 3}
foreach i $list {
if {$i == 2} {
continue
}
puts $i
}
当i为2时,跳出本次循0环,将列表中第2个元素3(从0开始数)赋值给i,打印i值为3。
- while 循环控制指令
while 判断语句 循环主体
如果判断语句成立(返回值非0),执行循环主体,直到不满足判断条件,返回空字符串。
set i 3
while {$i > 0} {
puts $i
set i [expr $i -1]//或者写成incr i -1
}
……,当i为1时,i减1后为0,循环结束 。
- for 循环控制指令
for 参数初始化 判断语句 重新初始化参数 循环主体
如果判断语句成立(返回值非0),执行循环主体,重新初始化参数,再进行判断,直到不满足判断条件,返回空字符串。
for {set i 3} {$i > 0} {incr i -1} {
puts $i
}
其中{set i 3}是初始化语句,{$i>0}是判断语句,{incr i-1}是重新初始化参数,puts $i是循环主体。
四、过程函数
- proc 过程函数
相当于C语言中的函数,用户自定义方便调用。
proc 函数名 参数列表 函数主体
定义一个加法函数:
//函数定义
proc add {a b} {
set sum [expr $a + $b]
return $sum
}
//函数调用
% add 13 14
27
和C语言中一样,TCL语言中也有全局变量和局部变量
全局变量:在所有过程之外定义的变量。
局部变量:在过程中定义的变量,只有在过程中可以被访问。
想要在过程中引用全局变量,可采用global指令。
set a 1
proc sample {x} {
global a
set a [expr $a + 1]
return [expr $a + $x]
}
五、正则匹配
定义: 正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串。
\w:匹配字母、数字、下划线。
\d:匹配数字。
\s:匹配空格。
.(点):匹配任意一个字符。
例1:abc123
正则表达式:\w+\d+或者\w\d
例2:×××空格×××
正则表达式:.+\s.+
- 锚位:用来指示字符串中开头和结尾的位置,使我们能够匹配到正确字符
- 正则匹配指令——regexp
regexp switches exp string
switches:-nocase将字符串中大写当成小写看待。
exp:正则表达式。
string:用来进行匹配的字符串。
% regexp {\w+\d+} "abc123"
1
% regexp {^\d.*\d$} "1 I Love TCL 2"
1
- 捕获字符串使用小括号( )
% regexp {\s(\d+).*} "Lihua is 15 years old" total age
1
//total捕获的是{}的内容
% puts $total
15 years old
//age捕获的是()的内容
% puts $age
15
六、文本处理
TCL文本处理的主要指令:open、gets、close
- 语法格式
open file 打开方式(r:读模式,w:写模式)
功能:打开文件
gets file 变量名
功能:逐行读file文件,返回该行的字符数
close file
功能:关闭文件
例1:读入文件的过程
set INPUTFILE [open file.txt r]
while {[gets $INPUTFILE line] >= 0} {
puts "$line"
}
close $INPUTFILE
例2: 写入文件的过程
set OUTPUTFILE [open file.txt w]
puts $OUTPUTFILE "I Love TCL"
close $OUTPUTFILE
例3:现有file.txt,写出求Slack之和的TCL脚本
file.txt
slack = -0.10
slack = -0.15
slack = -0.20
set sum 0
set INPUTFILE [open file.txt r]
while {[gets $INPUTFILE line] >= 0} {
if {[regexp {^slack\s+=\s+(-?\d+\.?\d+)}]} $line total slack]} {
set sum [expr $sum + $slack]
}
}
close $INPUTFILE
puts $sum
标签:set,匹配,数字,puts,TCL,循环,file,IC
From: https://blog.csdn.net/lbyNO_1/article/details/140525191