2011-07-06 30 views
1

我面對的CSV文件中MalformedCSVError問題。而線下面我被困在那裏給出:fasterCsv異常處理

「#數以百計的來源‘IP到國家’數據庫可用的人。」

因爲行包含雙quote.Execution停在這裏的例外是:FasterCSV :: MalformedCSVError

我該如何處理這個situation.I不能編輯csv文件以及..

請幫助我在這。

+0

我解決了這個問題:quote_char =>'''.... – Neelesh

+0

嗯,我可以相信他的答案,但他只是處理異常,我不需要任何類型的csv文件中的例外:( – Neelesh

回答

5

該示例確實是格式錯誤。引號字符似乎是雙引號,但其中嵌入了雙引號(應再次用雙引號轉義)。你真的應該拒絕這個錯誤。

作爲一個hacky解決方法,你可以嘗試更改引號字符從FasterCSV的文檔,你可以傳遞:quote_char =>「'」,這應該會讓你訪問數據,但現在你會得到雙引號作爲字符串的一部分 - 凌亂。

真的,你不應該求助於編輯源數據 - 你的程序應該優雅地處理錯誤,通知某人並繼續。

我們在NGINX後面的批處理模式下使用FasterCSV。當解析一行發生錯誤時,我們捕獲異常,注意導致錯誤的行並繼續。在解析所有行後,我們會通過電子郵件通知用戶,讓他們知道哪些行無法處理。

像這樣爲我們工作?

io.each_line do |line| 

     the_line = line.chomp 
     begin 
      row = FasterCSV.parse_line(the_line) 
      ok, message = acceptable?(row) 

      if not ok 
       reject(io.lineno, the_line, message) 
      else 
       accept(row, the_line) 
      end 

     rescue FasterCSV::MalformedCSVError => e 
      reject(io.lineno, the_line, e.to_s) 
     end 

    end 

注意處理程序來接受和拒絕允許我們去耦分析爲核心的接受和拒絕。