看起来像一个基本的任务,但我想采取以某事结束的字符串,并用其他东西替换最后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"
编辑:忘记提及,它给我的错误信息是:
bad index "index1": must be integer?[+-]integer? or end?[+-]integer? while executing "string replace $v index1 index2 .hdr" invoked from within "set result [string replace $v index1 index2 .hdr]" (file "string_manipulation.tcl" line 7)
答案 0 :(得分:3)
很简单,你忘记了你在TCL附近的时候。您传入了文字字符串“index1”和“index2”,而不是传入 index1 和 index2 的值。所以只需添加缺少的美元符号:
set result [string replace $v $index1 $index2 dog]
瞧! : - )
答案 1 :(得分:3)
这是一种方法。 Tcl识别诸如end
,end-1
,end-2
之类的令牌,......您想要从end-2
替换为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。