从csv中的'用逗号'字符串中删除双引号
问题描述:
我将xls转换为csv。由于我有在一列逗号,我越来越CSV如下:从csv中的'用逗号'字符串中删除双引号
AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"
AMP FAN,Yes,Shichi,PON Seal,,"Platinum, Gel"
如果你看到双引号是最后一列即将到来,因为它已经用逗号内。现在我正在阅读这个csv文件tcl文件,我正在发送到我的目标系统。在目标系统中,该值用双引号保存(意思就像“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软件包,因为用户在他们的环境中没有该软件包,我无法自己添加。
答
您可以从令牌获取每个元素,这样以后删除:
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
}
答
% 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
%
感谢ü这么多杰里:)你曾经再次:) – Crazy2crack
救了我@ Crazy2crack不客气!刚看到你的时候碰巧检查了新的问题,你很幸运;) – Jerry