一个小例程在输出文件中每几千字节放置一个五个字符的标记,该标记包含的数字通常> 10000,但也可能只包含一位数字。标记必须包含五个字符,因此左侧用零填充。由于标记的长度在每次迭代开始时未知,因此会填充四个零,然后删除部分或全部。
假设 x 代表实际标记并且 x = 400
如果我:
set x 0000$x
set x [string range $x [expr [string length $x] - 5] end]
脚本将返回“00400”,这就是我们所需要的。但是,如果我将其缩短为:
set x [string range $x [expr [string length "0000$x"] - 5] end]
它将返回“0”。希望有人能指出我哪里错了。
当您使用表达式
[string length "0000$x"]
时,它会计算字符串 "0000$x"
的长度,包括美元符号。因此字符串范围的索引将不正确。
set x [string range "0000$x" [expr [string length "0000$x"] - 5] end]
这确保计算整个字符串的长度
"0000$x"
,然后提取所需的子字符串。
希望有帮助。