2015-10-20 200 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 
%