TCL 基础

您所在的位置:网站首页 tcl文本处理 TCL 基础

TCL 基础

#TCL 基础| 来源: 网络整理| 查看: 265

置换

TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。

TCL置换分为以下三类:

变量置换:$

TCL解释器会认为 $ 后面为变量名,将变量置换成它的值。

命令置换:[ ]

[ ]内是一个独立的TCL语句

set a [expr 3 + 4]; # expr :表示求值 反斜杠置换:\

换行符、空格、[、$ 等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。

set X 1.2 set Y 1.3 puts "\[expr $X + $Y\]" >> [expr 1.2 + 1.3] puts "\[expr \$X + \$Y\]" >>[expr $X + $Y]

用 \t 表示TAB;

用 \n 表示换行符;

“ ” ,TCL解释器对双引号中 $ 和 [ ] 符号会进行变量置换和命令置换。{ } ,在花括号中,所有特殊字符都将成为普通字符,TCL解释器,不会对其做特殊处理。# ,表示注释。 变量

变量就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。

定义:set 变量名 变量值

取值:$变量名

set cell "bufx2" puts cell >> bufx2

例题:假设我们想打印变量variable ,后面跟一个“_1”,会发生什么呢?

set a 2 puts $a_1 # $ 后面会把 “a_1”当作一个整体 >> can't read "a_1": no such variable set a 2 puts ${a}_1 # $ 符号使用的范围,要注意对变量进行限定。 >> 2_1 数组

数组:TCL 中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。

定义:set 数组名(元素名) 值 ;元素可以有好多个; set a(1) "acb"

#数组 cell_1 中有元素 ref_name、full_name、pins set cell_1(ref_name) "bufx2" set cell_1(full_name) "top/cell" set cell_1(pins) "A B C" puts $cell_1(ref_name) >> bufx2 使用 array 指令获取数组信息 array size cell_1 >>3 array names cell_1 >> ref_name pins full_name 列表

列表是标量的有序集合。 定义:set 列表名 {元素1 元素2 元素3 ……}

取值:$列表名

set ivt_list {ivtx2 ivtx3 ivtx8} puts $ivt_list >> ivtx2 ivtx3 ivtx8

TCL中有一系列十分方便的列表操作命令。

命令功能concat合并两个列表lindex选取列表中的某个元素llength列表长度lappend在列表末端追加元素lsort列表排序 列表指令 concat

语法格式: concat 列表1 列表2

功能:将列表1与列表2合并

set list1 {bufx1 bufx2 bufx4} set list2 {ivtx1 ivtx2 ivtx4} concat $list1 $list2 llength

语法格式:iiength 列表

功能:返回列表中的元素个数

set list1 {bufx1 bufx2 bufx4} llength $list1 >>3

例题:list1为{bufx1 bufx2 bufx4},那么llength[concat $list1 $list1]会得到多少?

set list1 {bufx1 bufx2 bufx4} llength [concat $list1 $list1] >>6 lindex

语法格式:lindex 列表 n

功能:返回列表中第n个元素(从0开始计数)

set list1 {bufx1 bufx2 bufx4} lindex $list1 1 >>bufx2

例题:如何得到列表list1{a b c d e f }的最后一个元素?

set list1 {a b c d e f} llength $list1 >>6 expr [llength $list1]-1 >>5 lindex $list1 [expr [llength $list1] -1] >>f lappend

语法格式:lappend 列表 新元素

功能:列表末尾加入新元素

set a {1 2 3} lappend a 4 puts $a >> 1 2 3 4

例题:如果我们lappend 一个列表会怎么样?

set a {1 2 3} set b {4 5} lappend a $b >> 1 2 3 {4 5}

例题:如果我们想得到 4 用什么样的命令?

lindex [lappend a $b] 3 >> 4 5 lindex [lindex [lappend a $b] 3] 0 >> 4 lsort

语法格式:lsort 开关 列表

功能:将列表按照一定规则排序

开关: 缺省时默认按照ASCII码进行排列

-real 按照浮点数值大小排列-unique 唯一化,删除重复元素 #按照ASICC码排序 set list1 {c d a f b e} lsort $list1 >> a b c d e f #按照数字大小排序 set list2 {-2 3.1 5 0} losrt -real $list2 >> -2 0 3.1 5 #唯一化 set list3 {a c c b a d} lsort -unique $list3 >> a b c d

例题:如何得到列表list1{0 1.2 -4 3 5}中的最小值?

set list1 {0 1.2 -4 3 5} lsort -real $list1 >> -4 0 1.2 3 5 lindex [lsort -real $list1] 0 >> -4 运算 数学运算 a + ba - ba * ba / b 逻辑运算 a=ba==ba!=b

语法格式: expr 运算表达式

功能: 将运算表达式求值

例题:我们经常在TCL中遇到下面的现象:

(bin) 58 % expr 5/2 2

其原因是,表达式 5/2中 5 和 2 都是整数型参数,默认运算结果也是整数形。

如果想要进行浮点运算,只要将其中任意一个数值,写成浮点形式(有小数点)即可:

(bin) 59 % expr 5/2.0 2.5 (bin) 60 % expr 5.0/2 2.5 第三部分——控制流 if

语法格式:

if{判断条件}{

​ 脚本语句

}elseif {判断条件}{

​ 脚本语句

}else{

​ 脚本语句

}

set a 5 set b 6 if { $a > $b } { #“} {”这里也要加一个空格 puts $a } else { puts $b }

注意:上例中脚本语句的 ‘ { ’ 一定要写在上一行,因为如果不这样,TCL解释器会认为 if 命令在换行符处已结束,下一行会被当成新的命令,从而导致错误

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第四部分——过程函数 proc

语法格式:proc 函数名 参数列表 函数主体

功能:类似于C语言中的函数。即用户自定义的功能,方便多次调用。

proc add {a b} { #“} {”这里也要加一个空格 set sum [expr $a + $b] return $sum } add 3 4 >>7 全局变量与局部变量 全局变量:在所有过程之外定义的变量。局部变量:对与在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除。指令gloabl,可以在过程内部引用全局变量。 # --------------------------------------------# set a 1 proc sample {x} { global a; set a [expr $a + 1]; return [expr $a + $x]; } sample 3 # --------------------------------------------# (bin) 49 % source D:/Tools_soft/active_tcl/work_tcl/tcl_for/tcl_proc.tcl 5 # --------------------------------------------# set a 1 proc sample {x} { set a [expr $a + 1]; return [expr $a + $x]; } sample 3 # --------------------------------------------# (bin) 50 % source D:/Tools_soft/active_tcl/work_tcl/tcl_for/tcl_proc.tcl can't read "a": no such variable 第五部分——正则表达式 正则匹配

定义:正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串。

正则表达式的\w,用来匹配一个字母、数字、下划线。

正则表达式的\d,用来匹配一个数字。

字符串 abc123

正则表达式 \w\w\w\d\d\d (正确)

正则表达式 \d\w\w\d\d\d (错误)

正则匹配-量词

\w\w\w\d\d\d,这种写法过于繁琐,我们可以用代替重复的量词进行表示。

在TCL中常用以下三种量词:

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

字符串 abc123

正则表达式 \w+\d+ 或者 \w*\d*

* 和 + 的区别:* 可以是零次,+ 至少是一次;

字符串: abc123

正则表达式 \d*\w*\d* (正确)

正则表达式 \d+\w+\d+ (错误)

?表示零次或1次匹配;

正则表达式 \w?\w?\d\d\w\w\d\d

字符串 12ab34

字符串 ab12ab34

正则匹配-锚位 锚位:用来指示字符串当中的开头和结尾的位置,是我们能够匹配到正确的字符。 符号功能^字符串开头$字符串结尾

在这里插入图片描述

^\d\d\d:表示匹配字符串开头的三个数字\d\d\d$:表示匹配字符串结尾的三个数字 正则匹配-其他字符

在这里插入图片描述

正则匹配指令 - regexp

在这里插入图片描述

例题1

在这里插入图片描述

捕获变量

在这里插入图片描述

第六部分-文本处理 文本处理

用TCL处理文本在工作中十分常用。

主要掌握以下三个指令:

opengetsclose open

语法格式:open 文件 打开方式 (打开方式 r 表示读模式,w表示写模式)

功能:打开文件按

gets

语法格式:gets filedId变量名

功能: gets 读fileId标识的文件的下一行,并把该行赋给变量,并返回该行的字符数(文件尾返回 -1)

close

语法格式:close fileId

功能:关闭文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3