正确操作TCL中的字符串

时间:2013-08-01 15:48:02

标签: tcl

看起来像一个基本的任务,但我想采取以某事结束的字符串,并用其他东西替换最后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)

2 个答案:

答案 0 :(得分:3)

很简单,你忘记了你在TCL附近的时候。您传入了文字字符串“index1”和“index2”,而不是传入 index1 index2 。所以只需添加缺少的美元符号:

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

瞧! : - )

答案 1 :(得分:3)

这是一种方法。 Tcl识别诸如endend-1end-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。