如何在 TCL 中附加两个字符串并在它们之间添加 space?
How to append two string in TCL with a space between them?
我正在尝试在 tcl 中附加两个字符串。我正在从 csv 中读取并将值设置为变量,然后我将使用它为我的应用程序分配它。我尝试了下面的。
set vMyvalue [lindex $lsLine 17]
append vMyvalue " [lindex $lsLine 18]"
它给了我预期的结果。例如,如果我在 csv 的第 17 位和第 18 位有值 250 和 km。我得到
250 km
但问题是当第 17 和第 18 没有值时,我的意思是当它为空时,那个时候它也在添加 space。但是我的应用程序不允许我为该值分配 space 。我该如何解决这个问题?我刚开始在 TCL 工作。我不知道很多功能。
有几种方法可以做到这一点。对现有代码的最小修改可能是 trim 结果。 Trim 删除前导和尾随空格,但如果它只是空格,它将 trim 为空字符串。所以:
set myValue [string trim $myValue]
如果您不知道执行此操作的函数,我认为这是处理与此类似情况的最直观方法(例如,如果您要连接两个带有某个字符的字符串,但其中任何一个为空字符串,那么你想要做一些不同的事情),就是使用 if
。在这种情况下:
if {$vMyvalue eq " "} {set vMyvalue ""}
如果你想让代码更短一些,可以使用函数 lrange
(列表范围)、join
和 string
:
set vMyvalue [string trim [join [lrange $lsLine 17 18] " "]]
lrange
returns a list of elements from the list $lsLine
between indices 17 to 18 inclusive, then join
literally joins those elements with a space, and last, string trim
清除所有前导和尾随 space(如果 space 是字符串中唯一的字符,则完全删除它)。
我正在尝试在 tcl 中附加两个字符串。我正在从 csv 中读取并将值设置为变量,然后我将使用它为我的应用程序分配它。我尝试了下面的。
set vMyvalue [lindex $lsLine 17]
append vMyvalue " [lindex $lsLine 18]"
它给了我预期的结果。例如,如果我在 csv 的第 17 位和第 18 位有值 250 和 km。我得到
250 km
但问题是当第 17 和第 18 没有值时,我的意思是当它为空时,那个时候它也在添加 space。但是我的应用程序不允许我为该值分配 space 。我该如何解决这个问题?我刚开始在 TCL 工作。我不知道很多功能。
有几种方法可以做到这一点。对现有代码的最小修改可能是 trim 结果。 Trim 删除前导和尾随空格,但如果它只是空格,它将 trim 为空字符串。所以:
set myValue [string trim $myValue]
如果您不知道执行此操作的函数,我认为这是处理与此类似情况的最直观方法(例如,如果您要连接两个带有某个字符的字符串,但其中任何一个为空字符串,那么你想要做一些不同的事情),就是使用 if
。在这种情况下:
if {$vMyvalue eq " "} {set vMyvalue ""}
如果你想让代码更短一些,可以使用函数 lrange
(列表范围)、join
和 string
:
set vMyvalue [string trim [join [lrange $lsLine 17 18] " "]]
lrange
returns a list of elements from the list $lsLine
between indices 17 to 18 inclusive, then join
literally joins those elements with a space, and last, string trim
清除所有前导和尾随 space(如果 space 是字符串中唯一的字符,则完全删除它)。