我有NYMEX UTBPI
之类的字符串。在这里,我想获取NYMEX和UTBPI中间的空白索引,然后从该索引到最后一个索引我想要剪切子字符串。在这种情况下,我的子字符串将是UTBPI
我在下面使用
set part1 [substr $line [string index $line " "] [string index $line end-1]]
我遇到了错误。
wrong # args: should be "string index string charIndex"
while executing
"string index $line "
("foreach" body line 2)
invoked from within
"foreach line $pollerName {
set part1 [substr $line [string index $line ] [string index $line end-1]]
puts $part1
puts $line
}"
(file "Config.tcl" line 9)
你能告诉我如何做其他字符串操作的想法。任何良好的链接。
答案 0 :(得分:7)
我只会使用string range并将空格的索引传递给它(您可以使用字符串优先或其他任何内容找到)。
% set s "NYMEX UTBPI"
NYMEX UTBPI
% string range $s 6 end
UTBPI
或者先使用字符串动态查找空格:
% set output [string range $s [expr {[string first " " $s] + 1}] end]
UTBPI
答案 1 :(得分:5)
如果处理器时间不是问题,请将其拆分为列表并取第二个元素:
set part1 [lindex [split $line] 1]
如果字符串可以有任意数量的单词,
set new [join [lrange [split $line] 1 end]]
但是,我会使用Donal的建议并坚持string
操作。
答案 2 :(得分:1)
我认为,在Tcl中做到这一点的最好方法是:
set s "NYMEX UTBPI"
regexp -indices " " $s index;
puts [lindex $index 0]
变量索引将包含匹配模式的第一个和最后一个索引。在这里,当你正在寻找单个字符时,第一个和最后一个将是相同的,所以你可以使用
puts [lindex $index 0]
或
puts [lindex $index 1]
有关详细信息,请参阅官方文档:http://www.tcl.tk/man/tcl8.5/TclCmd/regexp.htm#M7