从 csv 中的 'string with comma' 中删除双引号
Remove double quotes from a 'string with comma' inside csv
我正在将 xls 转换为 csv。因为我在单列中有逗号,所以我得到的 csv 如下:
AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"
AMP FAN,Yes,Shichi,PON Seal,,"Platinum, Gel"
如果您看到最后一列出现双引号,因为它里面有逗号。现在,我正在 tcl 文件中读取此 csv,并将其发送到我的目标系统。在目标系统中,此值使用双引号保存(与 "Brass, Silver" 完全相同)。但是用户不想要那个双引号。所以我想设置成 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 包,因为用户在他们的环境中没有它,我无法自己添加。
% 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
%
您可以在获取每个元素后将它们从令牌中删除,如下所示:
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
}
我正在将 xls 转换为 csv。因为我在单列中有逗号,所以我得到的 csv 如下:
AMP FAN,Yes,Shichi,PON Seal,,"Brass, Silver"
AMP FAN,Yes,Shichi,PON Seal,,"Platinum, Gel"
如果您看到最后一列出现双引号,因为它里面有逗号。现在,我正在 tcl 文件中读取此 csv,并将其发送到我的目标系统。在目标系统中,此值使用双引号保存(与 "Brass, Silver" 完全相同)。但是用户不想要那个双引号。所以我想设置成 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 包,因为用户在他们的环境中没有它,我无法自己添加。
% 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
%
您可以在获取每个元素后将它们从令牌中删除,如下所示:
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
}