如何在TCL中迭代以下字符串

问题描述 投票:0回答:1

当我运行命令“set hw_targets [get_hw_targets]”时,我可以看到存储在 hw_targets 中的内容,如下所示:

puts $hw_targets

localhost:3121/xilinx_tcf/Digilent/210299B4BAF8 
localhost:3121/xilinx_tcf/Digilent/210299B146EB

我假设变量 $hw_targets 是一个列表或数组,但是当我尝试访问元素时希望将第一个元素作为“localhost:3121/xilinx_tcf/Digilent/210299B4BAF8”,将第二个元素作为“localhost:3121/” xilinx_tcf/Digilent/210299B146EB”,它总是会出现如下错误,

puts $hw_targets(0)
can't read "hw_targets(0)": variable isn't array

我也尝试使用正则表达式来分割它,比如

set theWords [regexp -all -inline {\S+} $hw_targets]

我仍然无法通过索引访问单词,并出现相同的错误,

puts $theWords(0)
can't read "theWords(0)": variable isn't array

如何通过索引访问内容?谢谢!

tcl
1个回答
0
投票

首先:在Tcl中,一切都是字符串。您提供的输出看起来既不像列表也不像数组,因此它只是一个包含换行符的字符串。

您可以通过换行符将变量拆分到列表中,然后使用

lindex

选择它们
set l [split $hw_targets "\n"]
puts [lindex $l 1]

这将导致:

localhost:3121/xilinx_tcf/Digilent/210299B4BAF8 

请注意,第一行,即索引 0,是空的。

编辑Donald Fellows指出,在这种特殊情况下,

lindex
也可以直接在字符串上使用,这也可以摆脱第一个空元素。因此,以下结果会产生相同的输出:

puts [lindex $hw_targets 0]
© www.soinside.com 2019 - 2024. All rights reserved.