1

似乎是一项基本任务,但我想取一个以某物结尾的字符串并将最后 3 个字母替换为其他字母。这是我的尝试:

set v "this is bob"
set index2 [string length $v]
set index1 [expr $index2 - 3]
set result [string replace $v index1 index2 dog]
puts $result; # I want it to now say "this is dog"

编辑:忘了提,它给我的错误信息是:

错误索引“index1”:必须是整数?[+-]整数?还是结束?[+-]整数?
    在执行时
“字符串替换 $v index1 index2 .hdr”
    从内部调用
“设置结果 [字符串替换 $v index1 index2 .hdr]”
    (文件“string_manipulation.tcl”第 7 行)
4

2 回答 2

3

这是一种方法。Tcl 识别诸如end, end-1, end-2, ... 之类的标记你想要的是替换 from end-2to end

set v "this is bob"
set result [string replace $v end-2 end "dog"]
# Result now is "this is dog"

更新

如果您只想替换文件扩展名,请使用file rootname删除扩展名,然后添加您自己的:

set v filename.arm
set result [file rootname $v].hdr; # Replaces .arm with .hdr

此解决方案的优点是可以处理各种长度的扩展,而不仅仅是 3。

于 2013-08-01T16:53:12.947 回答
3

很简单,你忘了你在 TCL 快结束了。您没有传入index1index2,而是传入了文字字符串“index1”和“index2”。所以只需添加缺少的美元符号:

set result [string replace $v $index1 $index2 dog]

瞧!:-)

于 2013-08-01T16:13:57.340 回答