当我运行命令“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中,一切都是字符串。您提供的输出看起来既不像列表也不像数组,因此它只是一个包含换行符的字符串。
您可以通过换行符将变量拆分到列表中,然后使用
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]