2011-10-22 40 views
0

Newbie to ruby​​這是我第一個使用FasterCSV Gem的項目,絕對的愛速度。FasterCSV錯誤/Library/Ruby/Gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb:1641:in`shift'

我發現,當字段過長它拋出了以下錯誤一個問題:

/Library/Ruby/Gems/1.8/gems/fastercsv-1.5.4/lib/faster_csv.rb: 1641:在`移':FasterCSV :: MalformedCSVError(FasterCSV :: MalformedCSVError)

的錯誤是在第二行第一行被正確地讀取:-)

「1013197145」, 「PSION HU6020手帶」 ,「1」,「1」,「10」

「1013197542」,「HP ProBook NA920EA_KT931AT 39.6 cm 15.6英寸)筆記本電腦 - 英特爾Core 2 Duo T6570 2.10 GHz - 1366 x 768 WXGA顯示屏 - 2 GB RAM - 250 GB硬盤 - DVD刻錄機LightScribe - 英特爾GMA 4500MHD顯卡 - 藍牙 - 網絡攝像頭 - 正版Windows Vista Business - 5小時電池 - HDMI」, 「1」, 「1」, 「10」

這裏是我的代碼:

FasterCSV.foreach(file_path, {:col_sep=> colsep, :quote_char => char}) do |row| 

    my.query("INSERT INTO product_prices (partno,costpriceexvat,sku, supplierid) VALUES ('#{row[7]}', '#{row[8]}', '#{row[3]}','1')") 

end 

任何幫助,將不勝感激。

回答

1

我懷疑這與FasterCSV窒息長字符串和所有英寸字符在您的項目描述的「(15.6」)「部分中的任何內容無關 - 因爲它與報價相同,所以它會終止CSV值,從而使一個格式不正確的CSV行。FasterCSV is designed to be strict關於這種事情。

+0

謝謝你似乎是正確的我去LOAD DATA LOCAL INFILE'公共/文件/ EN_UK_B_productdescriptions.csv'INTO表temp_productdescriptions而不是fastercsv: ( – ashga

+0

很高興我的答案幫助查明瞭這個問題,但是,在他們目前的形式下,它和你的問題都沒有被廣泛用作未來對StackOverflow用戶的引用。你是否願意將你的問題改寫爲更通用的Ø f「FasterCSV :: MalformedCSVError」的可能原因也許)? – kopischke

+0

對不起,新的這裏甚至沒有想到:S 基本上,我的行包含可能會被誤認爲列或報價終結符的文本中的字符。 FasterCSV無法像kopischke指出的那樣處理這個問題,所以我唯一的選擇是將數據直接批量插入到mysql中。 希望這可以清理一些東西! – ashga