在TCL中正确操作字符串
这似乎是一项基本任务,但我想取一个以某物结尾的字符串,并用其他内容替换最后3个字母。以下是我的尝试:在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" 编辑:忘记提及,它给我的错误消息是:
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快结束的时候。您没有传入index1和index2的值,而是传入了文本字符串“index1”和“index2”。因此,只需添加缺少的美元符号:
set result [string replace $v $index1 $index2 dog]
瞧!:-) 简单,你忘了你就在TCL快结束的时候。您没有传入index1和index2的值,而是传入了文本字符串“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”
我喜欢这个,非常简单。现在我不觉得自己很愚蠢了。那些该死的美元符号总是躲着我现在我不觉得自己很愚蠢。那些该死的美元符号总是让我摸不着