2015-10-20 192 views
1

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

回答

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 
} 
+0

感谢ü这么多杰里:)你曾经再次:) – Crazy2crack

+0

救了我@ Crazy2crack不客气!刚看到你的时候碰巧检查了新的问题,你很幸运;) – Jerry

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 
%