TCL 字符串范围行为

问题描述 投票:0回答:1

一个小例程在输出文件中每几千字节放置一个五个字符的标记,该标记包含的数字通常> 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”。希望有人能指出我哪里错了。

tcl
1个回答
0
投票

当您使用表达式

[string length "0000$x"]
时,它会计算字符串
"0000$x"
的长度,包括美元符号。因此字符串范围的索引将不正确。

set x [string range "0000$x" [expr [string length "0000$x"] - 5] end]

这确保计算整个字符串的长度

"0000$x"
,然后提取所需的子字符串。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.