sdk脚本语言 DEA05--TCL脚本语言(一)

11/28 09:10:58 来源网站:268辅助卡盟网

反斜杠 \ ,双引号 ” ”和大括号 { } 。

反斜杠在替换中已经介绍过了,其余两种如下:

示例1:
% set price 5
5
% set msg "egg price is \$$price"
egg price is $5
% set msg {egg price is \$$price}
egg price is \$$price

示例2:
% set name book
book
% set value 10
10
% puts [format "Item:%s\t%5.3f" $name $value]
Item:book      10.000

puts中的"Item:%s\t%5.3f"是format命令的格式说明,通常包含一些特殊的字符,如\t表示tab,由于必须在 format 命令调用前替换反斜杠,因此应当使用双引号来形成格式说明符。这里的格式用tab 分隔name 和 value,

%s和%5.3f用于说明 name 和 value 的格式。

示例3:
% set x 8
8
% set y 9
9
% puts stdout "[expr $x + $y]"
17
% puts stdout  [expr $x + $y]
17
% puts stdout "$x + $y] = [expr {$x + $y}]"
8 + 9] = 17
% puts "\"(5-3)*4\" is : [expr (5-3)*4] "
"(5-3)*4" is : 8

不必要用双引号,为了显示“ ”,要加一个

二、 Tcl表达式和计算命令 2.1 tcl表达式

一个 Tcl 表达式由操作数、运算符和括号组成,在操作数和操作符以及括号之间可以用空格分开。表达式的操作数默认是十进制,也可以八进制(操作数第一个字符是 0)或者十六进制《操作数的前两个字符是 0x)。操作数可以是整数也可以是浮点数。表达式的运算待包括逻辑运算符和算术运算符,如表所示:

2.2 TCL内置函数

![在这里插入图片tps://img-blog.csdnimg.cn/beab58ed0cc940a2919ccec4bd013755.png#pic_center)

2.3 expr命令

在TCL中用expr命令分析和解释数学表达式。

格式:
expr arg1? aeg2?...?

示例1:
%set x 10
10
% set y 20
20
% set z [expr "$x + $y"]
30
% set z_label "$y plus $x is :"
20 plus 10 is :
% puts {z_lable [expr "$x + $y"]}
z_lable [expr "$x + $y"]
% puts "{z_lable [expr "$x + $y"]}"
{z_lable 30}

示例2:

puts "pi = [expr 2*asin(1)]"
pi = 3.141592653589793

示例3:
set x 10
10
set len [expr {[string length foobar] + $x}]
16

2.4 incr命令

incr根据步长增加或减少。

示例:
% set a 10
10
% incr a 2
12
% incr a -3
9

三、 Tcl字符串操作

TCL把所有的输入都当做字符串看待。

3.1 format命令

格式:
format formatsring arg1 ...argn

formatstring格式说明包含了位置说明、旗标、域宽、精确度、字符长度和转换字符等部分。formatstring由 \、字符和%field组成。%field 是字符串,以下面表格中的任意一个字符结束,这个字符说明了格式数据所对应的数据类型。

由于格式定义时经常使用空格,所以要用双引号或者大括号将定义括起来。

3.1.1 format 位置指示

格式:
  数字$
#意思是直接取第几个参数的值,参数计算从1开始。
示例:
format {%2$s} a b c
format ”%2$s” a b c
b
% set str [format "%3\$s %1\$s %2\$s" "love" "y" "i"]
i love y

由于有特殊的作用,上面的阻止了有特殊的作用,上面的{ }阻止了有特殊的作用,上面的阻止了的置换作用,所以数字功能正确,但如果用””,则要加上抑制功能正确,但如果用” ”,则要加上 \ 抑制功能正确,但如果用””,则要加上抑制置换作用。

3.1.2 format 其他

格式化旗标、字符宽度、精度等。

-靠左对齐

+

显示数值正负号

+

以0补满

#

遇到O将前缀填入0遇到H添入0x

示例:
% set name ford
ford
% set age 15
15
% set msg [format "%s is %5d years old" $name $age]
ford is    15 years old
% format "%#05x" 20
0x014

3.2 string命令

如果要把某个简单变量当做字符串处理/看待,可以用string命令提供的功能。option多达20个:

3.2.1 字符串长度、索引、范围 length 命令

返回字符串长度,空格、换行也算一个字符(需要” "引起来)。

格式1:
string length string1
示例:
string length "aa112 11"
8

index 命令

返回字符串中第charIndex个字符串.

格式:
string index string charIndex
#charIndex可以是下面的值:
#整数n			:		第n个字符;
#end 			:		最后一个字符;
#end-整数n		:		倒数第n个字符。
示例:
string index aabbccdd 3
b

range 命令

返回字符串中fist到last的距离。

示例:
string range aabbccdd 1 3
abb

3.2.2 字符串比较 compare命令

格式:
string compare ?-nocase? ?-length int? string1 string2

对两个字符串进行比较,如果他们严格(-exact)相等,返回0,如果第一个字符串在字典中先于第二个字符串,返回-1,否则返回1.。-length可以指定匹配的长度,即从第一位开始匹配多少位。

示例:
% string compare aaa123 bbb123
-1
% string compare bbb123 aaa123
1
% string compare aaa123 aaa123
0

match命令

格式:
string match ?-nocase? Pattern string

如果pattern匹配string,返回1,否则返回0;-nocase参数sdk脚本语言,不区分大小写。

示例:
string match *i* aaaiaaa
1
string match *[0-9] aaaiaa123
invalid command name "0-9"
#大括号括起来
string match {*[0-9]} aaaiaa123
1
string match -nocase {[a-z]*[0-9]} aaa123
1

equal 命令

格式:
string equal ?-nocase? ?-length int? string1 string2

对两个字符串进行比较,如果他们严格(-exact)相等,返回1,否则返回0,-length可以指定匹配的长度,即从第一位开始匹配多少位。

示例:
% string equal -length 12 aaabbb123 aaabbb123
1
% string equal -length 12 aaabbb123 aaaccc123
0

3.2.3 字符串大小写转化 tolower 命令

格式:
string tolower string ?first? ?last?

将first到last位置的字符串改小写。

示例 :
% string tolower AABBCCDD 1 5
AabbccDD

toupper 命令

格式:
string toupper string ?first? ?last?

将first到last位置的字符串改大写。

示例 :
string toupper aabccdd 1 5
aABCCDd    

totitle 命令

格式:
string totitle string ?first? ?last?

将first到last位置的字符串改标题格式。

示例:
% string totitle aabccdd 1 5
aAbccdd

3.2.4 字符串剪裁 replace 命令

格式1:
string replace string fist last ?newstring?

使用newstring替换 fist到last位置的字符。如果newstring不存在,则将fist到last删除。如果fist比last大,则不替换。

示例:
% string replace aabbccdd 0 1 xx
xxbbccdd
% string replace aabbccdd 1 0 xx
aabbccdd
% string replace aabbccdd 0 1
bbccdd

map 命令

格式:
string map ?-nocase? mapping string

将string中出现的所有关键字都置换为响应值,置换按顺序进行的列表中先出现的关键字先处理。只对字符迭代一次,所以前面进行置换不会影响接下来的匹配查找。

示例:
% string map {aa AA} aabbccdd
AAbbccdd
% string map {aa AA bb BB cc CC} aabbccdd
AABBCCdd

trim 命令

格式:
string trim string ?chars?

将string开头和结尾出现的要剪裁的字符都删除。从两端开始,如果字符是a,则裁剪掉,这是针对字符辅助论坛,而不是字符串。

示例:
% string trim aabbccdd a
bbccdd

trimleft 命令

格式:
string trimleft string ?chars?

将string开头出现的要剪裁的字符都删除。同样针对字符。

示例:
% string trimleft a1abbccdd a
1abbccdd 

trimright 命令

格式: 
string trimright string ?chars?

将string结尾出现的要剪裁的字符都删除。同样针对字符。

示例:
% string trimright a1abbccd2d d
a1abbccd2
% string trimright a1abbccd2d 2
a1abbccd2d

3.2.5 字符串重复倒叙 repeat 命令

格式:
string repeat string count

将string重复cout次。

示例:
% string repeat string  2
stringstring

reverse 命令

格式:
string reverse string 

将string顺序倒过来。

示例:
% string reverse string
gnirts

3.3 字符串匹配

字符串一个重要运算是宇符串的模式匹配。模式本身是字符串,这个字符串也称为正则表达式 (regular expression),它描述了待匹配子串的构成规则。例如,a*是一种模式,表示以a开始的任意长度任意字符的字符串。

TCL支持基于正则表达式的模式匹配机制,相对于string match 命令这种机制匹配更复杂,功能更强大。TCL中有两条显示支持正则表达式的匹配命令,其他命令的选择项中包含了-regexp 以支持正则表达式。

3.3.1、正则表达式:

可以按照下面的几个规则表达正规表达式:

^           :  匹配一个串的开始;
$           :  匹配一个串的结尾;
.           :  匹配任意一个单字符;
*           :  匹配任意多次*前的字符;
+           :  匹配任意多个,但是至少要有一次匹配+前的字符;
[...]       :  匹配字符集合中的任意字符;
[^...]      :  匹配任意不再^后所列的集合中的字符;
(...)       :  把字符集合形成一个组。

在正则表达式中,* 符号匹配零个或者多个在 * 前的字符。例如a*,可以匹配a, aaaa 或者空串。如果在 * 是一个字符集合,通常用[ ]表示字符集合,那么 * 将匹配这个集合中任意数量的任意字符。例如,*[a-c]可以匹配 aa,abc, aabcbc,afg,cfg等任意字符、字符串或者空串。

**+符号的规则与 * 相同sdk脚本语言,但是它要求至少有一个字符匹配。例如,[a-c]**匹配至少包含 a,b,c一次的所有字符、字符串,但是不能是空串。

[^0-5a-g]可以匹配任意不包含 0-5或者a-g 的任意字符、字符串,不包含空串。

例如: 
 ([A-Za-z]+) +([a-z]+) +[is]) 这个表达式的说明了一个字符串的构成规则:
1  第一个字符是A-Z 中的任意一个大写字母,第二个字符是a-z中任意一个小写字母,这种规则至少重复一次;
2  空格至少重复一次;
3  a-z中的小写字母任意可以至少重复一次;
4  空格至少重复一次
5  出现 is 字符串;
按照上面的规则,字待串 My classmate liming is a good student 是可以匹配这个规则的。

3.3.2、regexp 命令

格式: 
regexp switches ? exp string ? matchVar ? ? subMatchl ...subMatchN?

这个命令必选的两个参数是exp 和string,其余的参数可选。regexp 命令在string 中搜索正规表达式exp,比较字符串 string 是否与 exp 部分或者全部匹配,如果匹配则返回1,否则返回 0。如果给出了参数 matchVar,那么将字符串中的子串拷贝到matchVar 中。按照自左向右的方式,subMatchVar 依次存放了和正则表达式exp中圆括号语法(子模式)相匹配的子字符串。

示例:
% set sample "Where there is a will, There is a way."
Where there is a will, There is a way.
% set result [regexp {[a-z]+} $sample match]
1
% puts "Result: $result; match: $match "
Result: 1; match: here

3.3.3、regsub 命令

基于正则表达式完成字符串匹配和替换…

格式:
regsub ? switches? exp string subSpec varName

在string中搜索匹配正规表达式exp 的子串,用subSpec 替换 string 中这些子串,并把结果拷贝到 varName 中。替换模式 subSpec包含有**&和\0**时,这些字符将被 string 中与 exp相匹配的子串替换,如果是\后面是数字 1-9,那么它们将被 **string 中与exp”()”**规则中相匹配的子串替换。

示例:
% set sample "She is a student."
She is a student.
% regsub "student" $sample "teacher" sample2
1
% puts "New: $sample2"
New: She is a teacher.

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    暂无相关资讯
sdk脚本语言 DEA05--TCL脚本语言(一)