数字IC——TCL语言2

(接上一篇)http://t.csdnimg.cn/eChQlicon-default.png?t=N7T8http://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文本处理的主要指令:opengetsclose

  • 语法格式

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值