如何在TCL中附加两个字符串,并在它们之间加一个空格?

如何在TCL中附加两个字符串,并在它们之间加一个空格?,tcl,Tcl,我试图在tcl中附加两个字符串。我从csv中读取并设置变量的值,然后我将使用该值将其分配给我的应用程序。我试过下面的那个 set vMyvalue [lindex $lsLine 17] append vMyvalue " [lindex $lsLine 18]" 它给了我预期的结果。例如,如果我在csv中的第17位和第18位有值250和km。我要走了 250 km 但问题是,当第17和第18行中没有值时,我的意思是当它为空时,它也在添加空间。但我的应用程序不允许为该值分配空间。我如何解决这

我试图在tcl中附加两个字符串。我从csv中读取并设置变量的值,然后我将使用该值将其分配给我的应用程序。我试过下面的那个

set vMyvalue [lindex $lsLine 17]
append vMyvalue " [lindex $lsLine 18]"
它给了我预期的结果。例如,如果我在csv中的第17位和第18位有值250km。我要走了

250 km

但问题是,当第17和第18行中没有值时,我的意思是当它为空时,它也在添加空间。但我的应用程序不允许为该值分配空间。我如何解决这个问题?我刚开始在TCL工作。我不知道有多少功能。

有几种方法可以实现这一点。对已有代码的最小修改可能是修剪结果。Trim删除前导和尾随空格,但如果它只是一个空格,则会将其修剪为空字符串。因此:

set myValue [string trim $myValue]

我认为,如果您不知道如何使用函数来执行此操作,那么处理类似于此情况的最直观的方法是使用
if
。在这种情况下:

if {$vMyvalue eq " "} {set vMyvalue ""}

如果要使代码略短一些,可以使用函数
lrange
(列表范围)、
join
string

set vMyvalue [string trim [join [lrange $lsLine 17 18] " "]]

返回索引17到18之间的列表
$lsLine
中的元素列表,然后用空格连接这些元素,最后清除所有前导和尾随空格(如果空格是字符串中唯一的字符,则完全删除空格)。

谢谢,它正在工作!!。如果我使用这些函数,会不会产生性能问题?因为我将在那个csv里有50万行。这需要为所有50万人做rows@Crazy2crack我只是运行了一些测试来检查它,看起来使用这些函数比不使用它们运行100000次要慢大约0.06微秒(1次运行几乎需要相同的时间)。