我正在将xls转换为csv。因为我在一个列中有逗号,所以我得到的csv如下:
AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"
AMP FAN,Yes,Shichi,PON Seal,,"Platinum, Gel"
如果您看到最后一列的双引号,因为它内部有逗号。现在我正在 tcl 文件中读取此csv,然后我将发送到我的目标系统。在目标系统中,这个值用双引号保存(意思就像“Brass,Silver”)。但用户不希望使用双引号。所以我想设置像黄铜,白银。有什么办法可以避免双引号。下面是我正在使用的当前脚本。
while {[gets $fileIn sLine] >= 0} {
#using regex to handle multiple commas in a single column
set matches [regexp -all -inline -- {("[^\"]+"|[^,]*)(?:$|,)} $sLine]
set lsLine {}
foreach {a b} $matches {lappend lsLine $b}
set sType [lindex $lsLine 0]
set sIsOk [lindex $lsLine 1]
set sMaterial [lindex $lsLine 5]
#later i'm setting sMaterial to some attribute
}
请帮帮我。
注意:我将无法使用csv包,因为用户在他们的环境中没有这个,我不能自己添加。
答案 0 :(得分:1)
% set input {AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"}
AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"
% regsub -all \" $input {}
AMP FAN,Yes,Shichi,PON Seal,,Brass, Silver
%
答案 1 :(得分:1)
获取每个元素后,您可以从令牌中删除它们,如下所示:
while {[gets $fileIn sLine] >= 0} {
#using regex to handle multiple commas in a single column
set matches [regexp -all -inline -- {("[^\"]+"|[^,]*)(?:$|,)} $sLine]
set lsLine {}
foreach {a b} $matches {
# Remove the quotes here
lappend lsLine [string map {\" {}} $b]
}
set sType [lindex $lsLine 0]
set sIsOk [lindex $lsLine 1]
set sMaterial [lindex $lsLine 5]
#later i'm setting sMaterial to some attribute
}