因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能,TCL中与字符串操作有关的命令有:string、format、regexp、regsub、scan等。
format命令
语法:format formatstring ?vluevalue...?
format命令类似于ANSIC中的sprintf函数和MFC中CString类提供的Format成员函数。它按formatstring提供的格式,把各个value的值组合到formatstring中形成一个新字符串,并返回。例如:
%set name john
John
%set age 20
20
%set msg [format "%s is %d years old" $name $age]
john is 20 years old
语法:scan string format varName?varName ...?
scan命令可以认为是format命令的逆,其功能类似于ANSIC中的sscanf函数。它按format提供的格式分析string字符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string和format中的字符和'%'必须匹配。例如:
% scan "some 26 34" "some %d %d"a b
2
% set a
26
% set b
34
% scan "12.34.56.78" "%d.%d.%d.%d" c d e f
4
% puts [format "the value of c is %d,d is %d,e is %d ,f is %d" $c$d $e $f]
the value of c is 12,d is 34,e is 56 ,f is 78
scan命令的返回值是匹配的变量个数。而且,我们发现,如果变量varName不存在的话,TCL会自动声明该变量。