我有一个CSV文件,包含两列数据。 我想在两个单独的列表中检索两列数据。
我尝试过以下代码:
set fp [open "D:\\RWTH\\Mini thesis\\EclipseTCL\\TCL trial\\excelv1.csv" r]
set file_data [read $fp]
close $fp
set data [split $file_data " "]
puts $data
获得的输出是
{0,245
0.0025,249
0.005,250
0.0075,252
0.01,253
0.0125,255
0.015,256
.
.
.
}
数据位于Excel工作表的2个单独列中。我希望仅从第二列i,e
中获取元素{245,
249,
250,
252,
253,
.
.
.
}
如果有人可以帮助我,我会很高兴。
答案 0 :(得分:3)
使用您已从文件中读取的file_data
,您可以:
lmap row [split [string trim $file_data] \n] {
scan $row %*f,%d
}
也就是说,修剪数据前后的空格,分割成行,然后从每一行扫描一个整数(跳过真实和逗号)。所有扫描的整数都收集在列表中。
然而,总是使用正确的工具来完成这项工作是个好主意。
package require csv
lmap row [split [string trim $file_data] \n] {
lindex [::csv::split $row] end
}
::csv::split
命令确切地知道如何拆分csv数据。在这种情况下,它并不是必需的,但使用csv
包来获取csv数据是一个好习惯。
文档: csv (package), lindex, lmap (for Tcl 8.5), lmap, package, scan, split, string
答案 1 :(得分:0)
您最好使用“gets”来读取文件中的每一行:
set fp [open "D:\\RWTH\\Mini thesis\\EclipseTCL\\TCL trial\\excelv1.csv" r]
set secondColumnData {}
while {[gets $fp line]>=0} {
if {[llength $line]>0} {
lappend secondColumnData [lindex [split $line ","] 1]
}
}
close $fp
puts $secondColumnData
答案 2 :(得分:0)
您也可以尝试:
set data [read [open "D:\\RWTH\\Mini thesis\\EclipseTCL\\TCL trial\\excelv1.csv"]]
set result [regexp -all -inline -line -- {^.*,(.*)$} $data]
set items {}
foreach {tmp item} $result {
lappend items $item
}
puts $items
输出:
245 249 250 252 253 255 256