TCL代码
在这种情况下,我试图编写一个proc调用,该调用将返回数组矩阵。 发布之后,我将尝试与返回的数组进行数组比较,以找出我在数组中查找的值是否存在,并列出这些值。
proc funcName { args } {
puts "$args"
for {set i 0} {$i < [llength $args]} {incr i} {
set Element [lindex $args $i]
puts $Element
set Element1 [split $Element "*"]
puts $Element1
foreach {F1 F2} $Element1 break
puts "$F1 -- $F2"
#ARRAY define
set Objectname($F1) "$F2"
foreach index [array names Objectname] {
puts "Objectname($index): $Objectname($index)"
}
}
}
set Value " X: *ACTIVE | Y: *ACTIVE | Z: *INACTIVE | Q: *NONE "
set Object [ split "$Value" | ]
funcName $Object
X: ACTIVE
Y: ACTIVE
Z: ACTIVE
Q: NONE
在上述块中,我要求对元素Z:INACTIVE,X:ACTIVE进行键搜索。我想动态地做并与每个元素进行比较,以防万一发现结果说“匹配”及其值。
答案 0 :(得分:0)
我想我了解Vishal的要求,给定字符串,使它成为数组。这是我的尝试:
proc makePairs {strData} {
set pairs {}
foreach kv [split $strData "|"] {
lassign [split $kv ":"] k v
set k [string trim $k]
set v [string trim $v " *"]
lappend pairs $k $v
}
return $pairs
}
set value " X: *ACTIVE | Y: *ACTIVE | Z: *INACTIVE | Q: *NONE "
array set ar [makePairs $value]
parray ar
ar(Q) = NONE
ar(X) = ACTIVE
ar(Y) = ACTIVE
ar(Z) = INACTIVE
funcName
或Objectname
之类的名称不会告诉读者其目的,因此毫无意义。好名字有助于定义问题/解决方案"|"
分割字符串,然后再用":"
答案 1 :(得分:0)
关于如何返回数组(摘要:返回字典):
但是,您在输入和处理方面也遇到了很多问题。特别是,您可能应该写:
proc funcName { args } {
foreach Element $args {
lassign [split $Element "*"] F1 F2
set Objectname([string trim $F1 " :"]) [string trim $F2]
}
foreach index [array names Objectname] {
puts "Objectname($index): $Objectname($index)"
}
return [array get Objectname]
}
set Value " X: *ACTIVE | Y: *ACTIVE | Z: *INACTIVE | Q: *NONE "
array set Object [funcName {*}[split $Value "|"]]
# Show we've really got it...
puts "$Object(X), $Object(Y), $Object(Z), $Object(Q)"
此处的关键是使用foreach
更多,string trim
,lassign
和{*}...
扩展语法。还有array get
和array set
用于将数组复制出函数。