1

我在 tcl 中有以下代码..

proc GetPPVSummary {} {
    global LIBRARY DB_MACHINE ALT_MACHINE

    set query "SELECT first 2 * from test ORDER by ppv_id DESC"
    set result [mtlrequest $LIBRARY DbSelect "test@$ALT_MACHINE|$query"]

    return $result
}

set return_data [GetPPVSummary]
puts $return_data

以上返回的是这样的:

{{753 38 {2000-04-10 00:00:00} {2000-04-11 00:00:00} 3 HQAWR 56897 PPV B Event_04292012_teaser {} Event_04292012_teaser The_World_Doesnt_Care {$99.00} {$0.01}}

如何在 tcl 中一一打印值?

好的,所以我现在尝试了以下操作:

foreach record $return_data {
    set event_date [lindex $record 1]
    set attempts_cnt [lindex $record 2]
    set success_cnt [lindex $record 3]
    set fail_cnt [lindex $record 4]
}


puts $event_date

现在,我得到整行而不是第一个或第二个值..

4

2 回答 2

3

假设 $return_data 是一个列表列表,你想要

foreach record $return_data {
    foreach item $record {
        puts $item
    }
}
于 2012-04-13T00:09:45.013 回答
2

最有可能mtlrequest返回一个列表,所以如果通过“如何在 tcl 中只打印值?” 你想问“我如何从这个值中提取成员”,有几个可能的答案:

  • lindex可用于通过其数字索引提取列表的成员,例如set x [lindex $return_data 5]将变量“x”设置为 value HQAWR
  • lassign(Tcl 8.5+) 可用于将列表值的元素分配给一组变量,例如lassign $return_data a b c d ...

请注意,这些{s 和}没有特殊含义 — 它们是 Tcl 将列表值转换为字符串的结果(您使用 要求它这样做puts):请参阅教程的本部分和部分以获取解释。

强烈建议您自己完成整个教程,否则您将遇到每一个小问题。Tcl 比乍看起来要简单得多,所以花点时间掌握它的基础知识。

于 2012-04-12T23:06:59.833 回答