在TCL中正确操作字符串

在TCL中正确操作字符串,tcl,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" 编辑:忘记提及,它给我的错误消息是:

这似乎是一项基本任务,但我想取一个以某物结尾的字符串,并用其他内容替换最后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) 坏索引“index1”:必须是整数?[+-]整数?还是结束?[+-]整数? 执行时 “字符串替换$v index1 index2.hdr” 从内部调用 “设置结果[字符串替换$v index1 index2.hdr]” (文件“string_manipulation.tcl”第7行)
简单,你忘了你就在TCL快结束的时候。您没有传入index1index2的值,而是传入了文本字符串“index1”和“index2”。因此,只需添加缺少的美元符号:

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

瞧!:-)

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

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

瞧!:-)

这里有一种方法。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个扩展。

这里有一种方法。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个。

出于好奇,您为什么假设最后一个单词总是3个字母?因为我将处理文件扩展名.am,我想用.hdr替换它,以便保存为不同的输出。出于好奇,为什么你认为最后一个单词总是3个字母?因为我将使用文件扩展名.am,我想用.hdr替换它,以便保存为不同的输出。+1。或者,保留除最后3个字符以外的所有字符:
设置结果“[string range$v 0 end-3]dog”
我喜欢这样,简单得多+1。或者,保留除最后3个字符以外的所有字符:
设置结果“[string range$v 0 end-3]dog”
我喜欢这个,非常简单。现在我不觉得自己很愚蠢了。那些该死的美元符号总是躲着我现在我不觉得自己很愚蠢。那些该死的美元符号总是让我摸不着