2017-09-03 3 views
-1

コードTcl "list as string"をリストとしてintrpretするには?いくつかの未知の理由により、

set result [[$sqlCmd execute] allrows -as lists] 

の次の行で、変数resultは、リストのように見える文字列を取得します。私はputs "result $result => [llength $result]"を記述する場合、私はputs [list $result]を書く場合{2 3 4 5}

はそれが{2 3 4 5} => 1

を印刷し、 listは1つの文字列からリストを作成するので、それは{{2 3 4 5}}を印刷します。
この文字列を期待していたものに変換する方法はありますか?リスト - 中かっこを削除して文字列を分割するなどの文字列処理を行わずに、split関数のリストに文字列を分割しますか?私はそれが何らかの解釈でなければならないことを示唆していますが、私は素晴らしい解決策を見つけることができません。

+0

TCLエキスパートではありませんが、SQLコマンドのように見えますが、1要素が別のリストである長さ1のリストを提供しています。コマンドが2つの行を選択した場合、その要素が個々の行を表す個々のリストである長さ2のリストが与えられます。 – user2357112

+0

@ user2357112あなたは何を意味するのか分かりません。長さ1のリストがnotlistになることを示唆しています。しかし、どうしたらいいのですか?SQL Serverコンソールで実行されると、リクエストは正確に1行のデータを返します。だから、なぜ、実際には、それはいくつかの異なる長さのリストを返す必要があります。説明してください、どういう意味ですか? – OlegG

+0

「長さ1のリストはnotlistになります」 - 何?いいえ、それはまだリストです。なぜあなたはそうではないと思いますか? – user2357112

答えて

1

allrowsは、リストを提供しています。各サブリストは行を表しています。このリストには1行があり、2 3 4 5なので、長さは1です。その要素にアクセスする通常の方法をリスト上で索引付けまたは反復することができます。

# If you're assuming there will only be one row 
set only_row [lindex $result 0] 

# Or if you want to iterate over all rows 
foreach row $result { 
    do whatever with $row 
} 
+0

この行はリストにする必要があります。そうではありません。 – OlegG

+0

@OlegG:それは*リストです。 – user2357112

+0

はい。コード[lindex $ result 0 0]は2を返します。ありがとう! :) – OlegG

2

allrowsメソッドは、1行につき1つのリストを返します(返される行は1つだけです)。 -as listsオプションが渡されると、そのリストの各要素自体が、その行の列を表すリストになります。

したがって、その行の列を反復するために、あなたがしたい:それは持っているよう

set result [[$sqlCmd execute] allrows -as lists] 
set rowresult [lindex $result 0] 
foreach col $rowresult { 
    puts "I've got a '$col'" 
} 

あなたは通常、カラム名をインデックス辞書などの行を表し、デフォルトを使用することを推奨していますSQL NULLのより良い表現(すなわち、列が、ドライバ指定のヌル値の代わりに欠けています。これは、しばしば空の文字列です)。

+0

あなたのアドバイスをありがとう。不幸にも、私の場合ではありません。 – OlegG

関連する問題