从csv中的'带逗号的字符串'中删除双引号

时间:2015-10-20 07:39:21

标签: csv tcl

我正在将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包,因为用户在他们的环境中没有这个,我不能自己添加。

2 个答案:

答案 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
}