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に値を1つずつ出力するにはどうすればよいですか?

わかりました、私は今次を試しました:

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

これで、最初または2番目の値ではなく、行全体を取得します。

4

2 に答える 2

3

$ return_dataがリストのリストであると仮定すると、次のようになります。

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

ほとんどmtlrequestの場合、リストを返すので、「tclで値を1つずつ出力するにはどうすればよいですか?」「この値からメンバーを抽出するにはどうすればよいですか」と質問したい場合、いくつかの可能な答えがあります。

  • lindexset x [lindex $return_data 5]変数「x」を値に設定するように、数値インデックスによってリストのメンバーを抽出するために使用できますHQAWR
  • lassign(Tcl 8.5+)を使用して、リスト値の要素を変数のセットに割り当てることができます。lassign $return_data a b c d ...

{これらは特別な意味を}持たないことに注意してください。これらは、Tclがリスト値を文字列に変換した結果です(を使用して変換するように要求しました)。説明については、チュートリアルのこの部分とこの部分をputs参照してください。

チュートリアル全体を通して自分で作業することを強くお勧めします。そうしないと、あらゆる小さな問題に頭を悩ませることになります。Tclは一見したところよりもはるかに単純なので、時間をかけてその基本をマスターしてください。

于 2012-04-12T23:06:59.833 に答える