过程
在TCL脚本中,过程相当于C语言中的函数,将一系列命令进行重复使用的接口。其语法格式如下:
proc proc_name {arguments} {
statements;
}
proc 为 TCL 语言过程体关键字。proc_name 为定义过程的名字。arguments 为输入的参数,参数个数可以为 0,也可以为多个。多个参数间用空格符分割。参数为 0 时,直接写大括号“{}”即可,但不可以省略大括号不写。statements 为过程内要执行的命令行。
下面给出一个过程代码实例:
proc compare_add {a b} {
if {$a > $b } {
return [expr $a + 3] ;
} else {
return [expr $b + 3] ;
}
}
puts [compare_add 10 5]
puts [compare_add 2 5]
# 13
# 8
全局变量和局部变量
TCL中的全局变量与局部变量与常见的如C不同,TCL中的全局变量只作用于过程的外部。
如
set a 10
proc add_my {a b} {
puts "The local Num: $a"
return [expr $a + $b]
}
add_my 3 5
puts "The global Num: $a"
# The local Num: 3
# The global Num: 10
过程中若想访问全局变量使用global 或者::访问
可变参数
可变参数,当参数个数未知时,采用列表的方式,将输入的一个参数作为列表变量
proc sum {a} {
set sum 0
puts "Length is: [llength $a]"
foreach i $a {
set sum [expr $sum + $i]
}
return $sum
}
#列表调用时也采用列表形式
puts [sum {1 2 3 4}]
# Length is: 4
# 10
递归调用
使用实例:计算阶乘
proc factorial {num} {
if {$num <= 1} {
return 1
} else {
return [expr $num * [factorial [expr $num-1]]]
}
}
puts "5! = [factorial 5]"
# 5!= 120
文件读写操作
open filename access
#access 包括r, w, a, r+, w+, a+ read -nonewhile $fp
#读取并返回文件剩余的所有内容 puts -nonewhile $fp str
#将字符串str写入到标识符为fp的文件中, 如果不加-nonewhile, 则str末尾会加换行符
文件写举例
set fp1 [open "file1.txt" "w"]
puts $fp1 "Content: first line."
puts $fp1 "0x1002"
puts $fp1 "45671234"
puts -nonewline $fp1 "Content: end line"
close $fp1
#则打开的file.txt文件内容如下:
Content: first line.
0x1002
45671234
Content: end line
文件读举例
set fp1 [open "file1.txt" "r"]
set str [read -nonewline $fp1]
puts $str
close $fp1
# Content: first line.
# 0x1002
# 45671234
# Content: end line