我有一个如下的Csv文件:
Production,FALSE,Other Line,Release,UOF-919 BASE,3A001A11,9X999,PC,"Jap,Ind",006
我正在阅读并使用tcl将值设置为变量,如下所示:
set fileIn [open "C:/myfile.csv" r]
while {[gets $fileIn sLine] >= 0} {
set lsLine [split $sLine ","]
set sType "Hardware"
set sName [lindex $lsLine 1]
set Sdev [lindex $lsLine 2]
set spara [lindex $lsLine 3]
set sDescription [lindex $lsLine 4]
set sManage [lindex $lsLine 5]
set sconnect [lindex $lsLine 6]
set sUOM [lindex $lsLine 7]
set sCountry [lindex $lsLine 8]
#my operations
}
flush $fileId
close $fileId
}
此处我无法将" Jap,Ind" 设置为 sCountry ,因为它在引号内已经有一个逗号。任何人都可以帮我设置吗?我是TCL的新人。
答案 0 :(得分:1)
package require csv
set fileIn [open C:/myfile.csv r]
while {[gets $fileIn sLine] >= 0} {
set lsLine [csv::split $sLine]
lassign $lsLine - sName Sdev spara sDescription sManage sConnect sUOM sCountry
}
close $fileId
}
切勿尝试使用split
解析CSV数据。它会以泪水结束。
请注意,这假设您要从索引1(即第二个元素)分配给sName
。第一个元素分配给虚拟变量-
。
对于稀疏分配,您可以使用(假设您需要#8而不是#9)
lassign $lsLine - - Sdev - - sManage sConnect sUOM sCountry
或
foreach idx {2 5 6 7 8} name {Sdev sManage sConnect sUOM sCountry} {
set $name [lindex $lsLine $idx]
}
如果您没有安装csv
,可以从命令行使用teacup install csv
来获取它。