TCL数据结构,需要提取,匹配和比较

时间:2014-01-16 10:27:22

标签: regex string structure tcl

我对全程编程完全不熟悉。 我必须提出一个程序来检查互连FPGA的电缆。从命令提示符(TCL界面),输入命令后得到以下内容:

{A13-D1 CON_CABLE_HT3_25 [serial# of the cable] J1 {1V0 1V2 1V35 1V5 1V8 2V5 3V3} [another random serial number]} 

现在对系统上的每个端口重复此操作。 A13是电缆连接的端口名称。我需要匹配电缆的序列号,然后将它们放在一个数组或其他东西。因此,如果A13D1具有相同的序列号(电缆),则表示A13已连接到D1。所以它可以写成A13 D1,这会更有意义。

获得所有连接后,我需要将它与配置文件进行比较,其中给出了所有连接。

我不需要有人为我这样做,我只是不知道如何开始!有什么想法吗?

我想在tcl中执行此操作,因为我将用于获取此数据的所有命令都在tcl中。

1 个答案:

答案 0 :(得分:1)

该行看起来像是一个带括号的Tcl列表,它给出了另一侧的Tcl是完全可能的。这使得提取信息变得容易!

假设您已在名为line的变量中获得该行,您可以使用lindex获取连接信息:

set connectInfo [lindex $line 0 0]

然后你会使用split和另一个lindex来获取它的两位:

set port [lindex [split $connectInfo "-"] 0]

您还可以使用regexp$connectInfo

中提取信息
# Anchored because we're matching the whole string
regexp {^(\w+)-\w+$} $connectInfo -> port
# You should check the result of regexp to see if the match actually succeeded
#    if {![regexp {^(\w+)-\w+$} $connectInfo -> port]} {
#        error "it didn't match! waaah!"
#    }

但是,编写正则表达式往往需要很好地了解数据的格式。 (如果你正在使用正则表达式,将它们放在大括号中,因为它可以避免反斜视。)