2013-04-15 48 views
3

我有一個CSV文件蒙山結構如下:爲什麼在讀取CSV文件時有尾部列?

"customer_id";"customer_name";"quantity"; 
"id1234";"Henry";"15"; 

與Ruby的標準CSV LIB解析:

csv_data = CSV.read(pathtofile,{ 
    :headers => :first_row, 
    :col_sep => ";", 
    :quote_char => '"' 
    :row_sep => "\r\n" #setting it to "\r" or "\n" results in MalformedCSVError 
}) 

puts csv_data.headers.count #4 

我不明白爲什麼解析似乎導致四列雖然文件只包含三個。這不是解析文件的正確方法嗎?

回答

6

在每行末尾的;暗示着另一個字段,即使沒有值。

我會刪除尾部;'s或只是當它被解析時忽略第四個字段。

+0

我將刪除尾部;有乾淨的數據可以使用。感謝你的回答。 – Gilles

0

尾隨;是罪魁禍首。

您可以預處理該文件,剝離尾隨的;,但這會產生不必要的開銷。

您可以發佈,過程中使用這樣的數據的返回數組從CSV:

csv_data = CSV.read(...).map(&:pop) 

這將遍歷子陣列,消除在每個最後一個元素。問題是read不可擴展,因此您可能想重新考慮使用它,而是使用CSV.foreach逐行讀取文件,然後在返回給您時彈出最後一個值。