TCL列表避免拆分字符串

时间:2013-09-12 15:48:18

标签: list split tcl

有没有办法避免在列表中拆分字符串?

例如,我有一个列表,其中我附加了几个带空格的字符串:

set l [list]
lappend l "hello guy how are you ?"
lappend l "chocolate is very good"

然后我想通过foreach循环处理列表中的每个字符串:

foreach str $l {
   puts "$str"
} 

但是当它到达列表中的最后一个字符串时,最后一个字符串的所有元素都会被拆分。怎么避免这个?

感谢。

2 个答案:

答案 0 :(得分:3)

我怀疑你所拥有的实际上是某个地方:

lappend l "chocolate" "is" "very" "good"
# And not this...
#lappend l "chocolate is very good"

这是一个非常重要的区别。 lappend命令是 variadic ;它提供的参数与您提供的参数一样多(在变量名称之后),并将它们作为自己的列表元素附加到给定变量。这意味着省略引用不会导致错误;它是正确的,有用的一般即使不在你的特定情况下也是如此。

请注意lappend要小心;它不会错误地引用任何东西。


另一种可能性是您使用了append而不是lappend。将其参数附加为字符串而不是列表项。 (恰好有很多句子看起来很像Tcl列表。)两个命令之间的区别是基本的,如果你赶时间,可能有点容易错过。

append l " chocolate is very good"
# vs.
lappend l " chocolate is very good"

答案 1 :(得分:0)

追加是避免此类情况的最佳方式。简化追加:

 % set l [list]
 % set l "$l hello guy how are you ?"
  hello guy how are you ?
 % set l "$l chocolate is very good"
  hello guy how are you ? chocolate is very good

OR

 % set l [list]
 % append l "hello guy how are you ?"
 hello guy how are you ?
 % append l " chocolate is very good"
 hello guy how are you ? chocolate is very good