由于某种未知原因,以下代码行中的变量result
set result [[$sqlCmd execute] allrows -as lists]
获取类似于列表的字符串:{2 3 4 5}
如果我写puts "result $result => [llength $result]"
,则会打印{2 3 4 5} => 1
如果我写puts [list $result]
,它会打印{{2 3 4 5}}
,这是正确的,因为list
会从一个字符串创建列表。
有没有办法将此字符串转换为预期的字符 - 列表 - 没有任何字符串处理步骤,如删除大括号和将字符串拆分为split
函数列表?我建议它必须是一些解释,但我无法找到很好的解释。
答案 0 :(得分:2)
allrows
方法总是返回一个列表,每行一个(即使只返回一行)。传入-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
表示形式(即,列不存在,而不是驱动程序 - 指定的空值,通常是含糊不清的空字符串)。
答案 1 :(得分: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
}