本节介绍string、append、format、scan、binary命令
一、string命令
string bytelength str | 返回用于存储字符串的字节数,由于UTF-8编码的原因,或许与string length返回的字符长度有所不同 |
string compare ?-nocase? ?-length len? str1 str2 | 根据字典顺序来比较字符串。使用-nocase来完成大小写无关的比较。使用-length来限制比较头len个字符。如果字符串相同则返回0,如果str1的顺序比str2靠前就返回-1,对于其它情况返回1 |
string equal ?-nocase? str1 str2 | 比较字符串,如果相同则返回1。使用-nocase来完成大小写无关的比较 |
string first str1 str2 | 返回str2中str1第一次出现的索引位置,若是其中没有发现str1的话就返回-1 |
string index string index | 返回位于指定index位置的,索引从0开始计数,使用end表示最后一个字符 |
string is class ?strict? ?-failindex varname? String |
如果string从属于class就返回1,如果指定了-strict,那么就从不匹配空字符串,否则总是要匹配的。如果指定了failindex,那么就会将在string中阻止使其成为class一员的字符索引赋给varname |
string last str1 str2 | 返回str2中str1最后一次出现的索引位置,如果没有找到str1就返回-1 |
string length string | 返回string中的字符个数 |
string map ?-nocase? charMap string | 返回一个根据charMap中输入、输出列表将string中的字符进行映射后而产生的新字符串 |
string match pattern str | 如果str匹配pattern就返回1,否则返回0。使用的是统配风格的匹配 |
string range str i j | 返回str中从i到j之间的字符串 |
string repeat str count | 返回将str重复count次的字符串 |
string replace str first last ?newstr? | 返回一个通过把first到last的字符替换为newstr之后的新字符串,或是返回空 |
string tolower string ?first? ?last? | 返回string的小写转化形式。first和last决定了在string上的操作范围 |
string totitle string ?first? ?last? | 通过将第一个字符替换为Unicode的标题型字符或大写形式,而其余替换为小写形式的方法来将string转换为第一个字符为大写的形式。first和last决定了在string上的操作范围 |
string toupper string ?first? ?last? | 返回string的大写形式。first和last决定了在string上的操作范围 |
string trim string ?chars? |
从string两端去除chars中指定的字符。chars默认为空白符 |
string trimleft string ?chars? |
从string开头去除chars中指定的字符。chars默认为空白符 |
string trimright string ?chars? | 从string结尾去除chars中指定的字符。chars默认为空白符 |
string wordend str ix | 返回str中在索引ix位置包含字符的单词之后的字符的索引位置 |
string wordstart str ix | 返回str中在索引ix位置包含字符的单词中第一个字符的索引位置 |
二、append命令
append接收一个变量名作为第一个变元,并把剩余的变元连接到指定变量当前值的后面。
#!/usr/bin/tcl/tcl8.6.9/unix/tclsh
set foo x
append foo a b c
puts stdout $foo
三、format命令
与C语言中printf函数类似,根据一种格式说明来格式化字符串。
四、scan命令
根据格式规格描述来解析一个字符串并把值赋给变量。返回成功完成的转换个数。
五、binary命令
用于在字符串与压缩的二进制表示形式之间进行转换。binary format命令接收数值并根据模板进行压缩。
六、字符串介绍(针对若干string命令进行详细的介绍)
(一)字符串索引
1、Tcl字符串中的字符从0开始记数,特殊索引end用来指定字符串的最后一个字符。
string range abcd 2 end
=>cd
2、通过指定end-N来获取末尾之前的第N个字符
string range abcd 2 end-1
=>c
用来获取字符串的操作:first、last、wordstart、wordend、index、range。
(二)字符串与表达式
可以在expr、if、while中使用比较操作符==、!=、<、>进行字符串的比较。在比较过程中,必须以双引号将字符串值括起来,这样表达式语法分析器才会按照字符串类型来进行识别。
if {$x == "foo"} command
安全的比较字符串的方式是string compare和equal操作。string compare在字符串相等时返回0,在第一个字符串按照词典顺序小于第二个时返回-1,在第一个字符串大于第二个时返回1。
#!/usr/bin/tcl/tcl8.6.9/unix/tclsh
if {[string compare abc abc] == 0} {
puts stdout 1
}
if {[string equal abc abc]} {
puts stdout 1
}
(三)字符串的匹配
使用string match匹配字符
字符 | 说明 |
* | 匹配任意数量的任意字符 |
? | 确切地匹配一个字符 |
[chars] | 匹配chars中的任意一个字符 |
(四)字符类
string is 命令用来测试一个字符串是否属于某个特定的类(class)。类是按照Unicode字符集来定义的,因此比以ASCII编码方式指定范围的字符集更加通用。
字符类 | 说明 |
alnum | 任何字母或数字字符 |
alpha | 任何字母字符 |
ascii |
任何具有7位字符编码的字符(即小于128) |
boolean | 0,1,true,false(无关大小写) |
control | 字符编码小于32而又不是NULL的字符 |
digit | 任何数字字符 |
double | 有效浮点数 |
false | 0或false(无论大小写) |
graph | 不包含空格字符在内的任何打印字符 |
integer | 有效整数 |
lower | 全为小写的字符串 |
alnum的同义词 | |
punct | 任何标点符号 |
space | 空格符、制表符、换行符、回车、垂直制表、退格符 |
true | 1或true(无论大小写) |
upper | 全为大写的字符串 |
wordchar | 字母、数字和下划线 |
xdigit | 有效的十六进制数字 |
(五)字符串映射
string map命令根据字符映射对字符串进行转换。映射以输入、输出表的形式表示。凡是字符串中包含有输入序列的地方都使用相应的输出进行替换。