0

次のような出力を返す選択クエリがあります(クエリは4つのレコードを返し、各レコードは7行です):

{HD 208 {} 2012-04-13 25 21 4} {SD 208 {} 2012-04-13 100 97 3} {HD 2072 {} 2012-04-13 5 4 1} {SD 2072 {} 2012-04-13 50 45 6}

ここで、それらを変数に格納し、1 つずつ表示するように設定して、レコードが $get_record に返される html テーブルを使用して表示できるようにします。だからここに私がやっていることがあります

foreach record $get_record {
    foreach item [lindex $record 0] {

        set event_name [ lindex $item 0]
        puts $event_name
        set event_date [ lindex $item 1]
        put $event_date
        set attempts_cnt [ lindex $item 2]
        put $attempts_cnt
        set success_cnt [ lindex $item 3]
        put $success_cnt

  }
}

残念ながら、これは機能しません..

4

2 に答える 2

2

グレンの答えを拡張するには:

問題は、間違った方法で反復していることです。

  1. 外側のループでは、変数「record」に、返された行セットの各行が1つずつ割り当てられます。
  2. 次に、不明な理由で内部ループを導入します。これは次のように機能します。
    1. 「record」変数に含まれる行から最初の要素を抽出します。
    2. その要素をリストとして解釈し、それを繰り返します。データを使用すると、その要素は「HD」のようなものになります。これは、1つの要素のリストとして解釈されます(「HD」、当然のことながら)。

間違いはおそらく今明らかになっているはずです。

したがって、Glennが提供する修正は簡単です。

  • 結果セットの行を反復処理する外側のループのみを保持します。
  • 行ごとに、その行の「列値」の値を名前付き変数のセットに割り当てます。これを行うための慣用的な方法(または+lassignを使用したトリック)が提供されていますが、 +アプローチを維持することもできます(ただし、より冗長でエレガントではありません)。foreachbreaklindexset
于 2012-04-13T21:08:32.040 に答える
2

Tcl 8.5 以降を使用している場合

foreach record $get_record {
    lassign $record event_name event_date attemts_cnt success_cnt
    puts $event_name
    puts $event_date
    puts $attempts_cnt
    puts $success_cnt
}

Tcl 8.4 以前を使用している場合

foreach record $get_record {
    foreach {event_name event_date attemts_cnt success_cnt} $record {break}
    puts $event_name
    puts $event_date
    puts $attempts_cnt
    puts $success_cnt
}
于 2012-04-13T19:52:32.573 に答える