2011-06-20 43 views

回答

8

我確信自我實現是重新發明車輪。如果stdlib的CSV類不符合您的要求,請嘗試另一個實現FasterCSV

確保您的輸入格式是否正確:只在引號內用新行和逗號和轉義引號。

更新:根據Generating fields containing newline with Ruby CSV::Writer stdlib的CSV在包含換行符的字段中存在問題。我想它首先使用換行符作爲分隔符來盲目地分割行,並且不考慮任何轉義。

+0

我意識到我是用舊的CSV庫,因爲我使用的紅寶石1.8.7。更改爲使用紅寶石1.9.2其中FasterCSV現在是標準的CSV庫,它工作正常。 – link664

2

您需要知道輸入csv文件的格式,它需要有效。 如果逗號不是字段分隔符,則必須指定哪個字符是分隔符。

處理CSV文件的可能看起來像:

CSV.foreach(fname_in, {:col_sep => ';', :quote_char => '"', 
         :headers => true, 
         :encoding => Encoding::UTF_8}) do 
    |row| 
    ... 
    # do some stuff with the row 
    ... 
end 

正如你可以看到,有更多的選擇如何描述輸入格式。請參閱csv模塊的CSV class的Ruby文檔。

1

FasterCSV有一個方便的parse_line()方法,可以在創建數組時很好地複製.split(',')的功能,同時尊重雙引號字符串中的逗號規則。

require 'csv' 
CSV.parse_line(line) 

例...

require 'csv' 
line='"PBN, Inc.",100,10' 
puts(line.chomp.split(',')) 
    "PBN 
    Inc." 
    100 
    10 
puts(CSV.parse_line(line)) 
    PBN, Inc. 
    100 
    10 
相關問題