【问题标题】:Remove double quotes from a 'string with comma' inside csv从 csv 中的“带逗号的字符串”中删除双引号
【发布时间】:2016-01-18 18:18:00
【问题描述】:

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

【问题讨论】:

    标签: csv tcl


    【解决方案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
    }
    

    【讨论】:

    • 非常感谢你,杰瑞 :) 你又救了我一次 :)
    • @Crazy2crack 不客气!刚巧看到你的新问题,你很幸运;)
    【解决方案2】:
    % 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
    %
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2010-09-05
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多