进行调用以创建Array并根据要求执行逻辑迭代

时间:2019-05-06 03:49:10

标签: tcl

TCL代码

  1. 基于命令输出值作为输入源构建数组。
  2. 执行逻辑迭代以识别匹配项和不匹配值以供决策。

在这种情况下,我试图编写一个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进行键搜索。我想动态地做并与每个元素进行比较,以防万一发现结果说“匹配”及其值。

2 个答案:

答案 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

注释

  • 通常,请选择描述性名称。诸如funcNameObjectname之类的名称不会告诉读者其目的,因此毫无意义。好名字有助于定义问题/解决方案
  • 我的方法是先用"|"分割字符串,然后再用":"

答案 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 trimlassign{*}...扩展语法。还有array getarray set用于将数组复制出函数。