tcl入门,方便查找

笔记内容来自哔哩哔哩"讲芯片的邸老师"

1、概述

脚本解释器

#!/user/bin/tclsh

置换

变量置换$

设置变量a为snow

set a "snow"
puts $a	#打印snow
puts a 	#打印 a

命令置换[]

[]内解释器认为是独立的tcl语句

set a [expr 3+4] #计算3+4
puts $a #打印7

反斜杠置换\

所有具有特殊作用的符号,加上\后解释器认作普通符号

puts "[expr $x + $y]" #打印x值+y值的具体值
puts “\[expr $x + $y]” #打印字符串[expr $x + $y]

花括号{}

花括号内所有特殊字符被当作普通字符处理

2、变量、数组、列表

变量

set a 2
puts ${a}_1
puts $a_1#这种是错误写法

数组

set 数组名(元素名) “值” #声明数组
puts $数组名(元素名)#引用数组
array	size	数组名 #获取数组元素个数
array	names	数组名 #获取数组元素名

列表

set list_name {元素1 元素2 元素3}
puts $list_name
列表操作命令
命令 功能
concat 合并两个列表
lindex 选取列表中某个元素
llength 列表长度
lappend 在列表末端追加元素
lsort 列表排序
set list1 {bufx1 bufx2 bufx4}
set list2 {ivtx1 ivtx2 ivtx4}
concat	$list1 $list2
llength	$list1
llength [concat $list1 $list2]
lindex $list1 [expr [llength $list1] -1]
lappend	list1 bufx8#注意,这里list1前面不用加$
lappend list1 $list2 #把list2整体当作元素追加在list1后边
set $list1 {c,d,a,f,f,b}
lsort $list1#默认按照asicc码排序,结果为abcdff
set $list2 {-2,3.1,5,0}
lsort -real $list2#按照数字大小排序,结果为-2 0 3.1 5
lsort -unique $list1 #列表唯一化,删除重复项,结果为abcdf

运算

数学运算

+ - * /

指令 expr:将运算表达式求职

逻辑运算

<= >= == !=

3、控制流

if

set list1 {0 1 2 3 4}
set length [llength $list1]
if {$length > 3}{
puts "the length of list1 is larger than 3"
}else{
puts "the length of list1 is not larger than 3"
}

注意“{”写在上一行,否则解释器认为if语句已经结束

foreach

set list1 {1 2 3 4}
foreach i $list1{
if {$i==2}{
break
}
puts $i
}

list1的每个元素被赋给i,然后被打印,可使用break跳出foreach,也可用continue跳出本次循环

while

set i 3 
while($i > 0){
puts $i
incr i -1;#等价于set i [expr $i -1]
}

for

for {set i 3}{$i >0}{incr i -1}{
puts $i
}

4、过程函数

proc

用于自定义函数

proc add {a b} {
set sum [expr $a + $b]
return $sum
}
add 3 4

变量分为过程变量和全局变量,过程变量定义在proc中,在proc中引用全局变量使用global

set a 1
proc sample {x} {
global a
set a [expr $a + 1]
return [expr $a + $x]
}

5、正则匹配

量词

\w用来匹配一个字母、数字、下划线

\d用来匹配一个数字

abc123可以用\w\w\w\d\d\d来匹配

符号 功能
* 零次或多次匹配
+ 一次或多次匹配
零次或一次匹配

上例改为\w+\d+或者\w*\d*

锚位

符号 功能
^ 字符串开头
$ 字符串结尾

^\d\d\d指取出123abc123开头的123

\d\d\d$指取出123abc123结尾的123

其他字符

\s指空格

. 表示任意字符

regexp

  • switches:-nocase将字符串中的大小写都看成小写
  • exp正则表达式
  • string用来匹配的字符串
  • matchstring表示用正则表达式匹配的所有字符串
  • sub1表示正则表达式中的第一个子表达式匹配的字符串
  • sub2表示正则表达式中的第二个子表达式匹配的字符串

regexp {\w+\d+} “abc456”
regexp {^\d.*\d} "1 dfsal 1"#匹配以数字开头且以数字结尾的字符串
通过()捕获字符串

将字符串“Snow is 30 years old”中30捕获出来

regexp {\s(\d+).*} "Snow is 30 years old" total age
#此匹配会匹配出30 years old,然后存放在total中
#而括号中的内容\d+会存放在age中

将Snow和30一起捕获

regexp {^(\w+)\s\w+\s(\d+).*} "Snow is 30 years old" total name age
#name存放第一个括号里的匹配
#age存放第二个括号里的匹配

6、文本处理

读入文件

set INPUTFILE [open file.txt]#以只读模式打开file.txt
while{[gets $INPUTFILE line]>0}{
puts $line
}
close $INPUTFILE

写入文件

set OUTPUTFILE [open file.txt]
puts %OUTPUTLINE "hello world"
close $OUTPUTFILE

posted @   骑猪上树的少年  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
回到顶部
点击右上角即可分享
微信分享提示

目录导航