9

我有类似的字符串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)

你能给我一些关于如何进行其他字符串操作的想法吗?任何好的链接。

4

3 回答 3

7

我只会使用字符串范围并将空格的索引传递给它(您可以先使用字符串或其他方式找到它)。

% set s "NYMEX UTBPI"
NYMEX UTBPI
% string range $s 6 end
UTBPI

或者首先使用字符串动态查找空格:

% set output [string range $s [expr {[string first " " $s] + 1}] end]
UTBPI
于 2013-04-10T11:04:58.980 回答
5

如果处理器时间不是问题,请将其拆分为一个列表并获取第二个元素:

set part1 [lindex [split $line] 1]

如果字符串可以包含任意数量的单词,

set new [join [lrange [split $line] 1 end]]

但是,我会使用 Donal 的建议并坚持string运营。

于 2013-04-11T00:22:40.647 回答
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

于 2013-04-10T18:24:55.887 回答