2011-03-24 61 views
0

我想將我的csv數據保存到與項目模型關聯的表項中。使用fastercsv從csv保存字段到數據庫的問題

這是我的CSV有:

'name';'number';'sub_category_id';'category_id';'quantity';'sku'; 'description';'cost_price';'selling_price' 
'Uploaded Item Number 1';'54';'KRT';'WN';'67';'WNKRT0054';'Some Description here!!';'780';'890' 
'Uploaded Item Number 2';'74';'KRT';'WN';'98;'WNKRT0074';'Some Description here!!';'8660';'9790' 

第一行顯示的項目表中的字段。

在這裏,我使用fastercsv處理我的csv和回形針上傳。

我能處理文件中讀取內容,並能在這裏也填補了該領域是處理代碼:

def proc_csv 
    @import = Import.find(params[:id]) 
    @lines = parse_csv_file(@import.csv.path) 
    @lines.shift 
     @lines.each do |line , j| 
     unless line.nil? 
     line_split = line.split(";") 
     unless ((line_split[0].nil?) or (line_split[1].nil?) or (line_split[2].nil?) or (line_split[3].nil?) or (line_split[4].nil?) or (line_split[5].nil?)) 
     # I used puts to get to know about what's going on. 
     puts "*"*50+"line_split[0]: #{line_split[0]}"+"*"*50 
     puts "*"*50+"line_split[1]: #{line_split[1]}"+"*"*50 
     puts "*"*50+"line_split[2]: #{line_split[2]}"+"*"*50 
     puts "*"*50+"line_split[3]: #{line_split[3]}"+"*"*50 
     puts "*"*50+"line_split[4]: #{line_split[4]}"+"*"*50 
     puts "*"*50+"line_split[5]: #{line_split[5]}"+"*"*50 
     puts "*"*50+"line_split[6]: #{line_split[6]}"+"*"*50 
     puts "*"*50+"line_split[7]: #{line_split[7]}"+"*"*50 
     puts "*"*50+"line_split[8]: #{line_split[8]}"+"*"*50 

     @item = [:name => line_split[0], :number => line_split[1], :sub_category_id => line_split[2],:category_id => line_split[3],:quantity => line_split[4], :sku => line_split[5], :description => line_split[6], :cost_price => line_split[7], :selling_price => line_split[8]] 
     puts "#"*100+"@item is: #{@item.inspect}"+"#"*100 

     end 
     end 
     end 
    redirect_to import_path(@import) 
    end 

,但問題是,當它處理它,當我檢查@item在控制檯它看起來像這樣:

####################################################################################################@item is: [{:quantity=>"\000'\0006\0007\000'\000", :name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0001\000'\000", :sku=>"\000'\000W\000N\000K\000R\000T\0000\0000\0005\0004\000'\000", :cost_price=>"\000'\0007\0008\0000\000'\000", :number=>"\000'\0005\0004\000'\000", :selling_price=>"\000'\0008\0009\0000\000'\000", :sub_category_id=>"\000'\000K\000R\000T\000'\000", :description=>"\000'\000S\000o\000m\000e\000 \000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n\000 \000h\000e\000r\000e\000!\000!\000'\000", :category_id=>"\000'\000W\000N\000'\000"}]#################################################################################################### 

####################################################################################################@item is: [{:quantity=>"\000'\0009\0008\000", :name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0002\000'\000", :sku=>"\000'\000W\000N\000K\000R\000T\0000\0000\0007\0004\000'\000", :cost_price=>"\000'\0008\0006\0006\0000\000'\000", :number=>"\000'\0007\0004\000'\000", :selling_price=>"\000'\0009\0007\0009\0000\000'\000", :sub_category_id=>"\000'\000K\000R\000T\000'\000", :description=>"\000'\000S\000o\000m\000e\000 \000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n\000 \000h\000e\000r\000e\000!\000!\000'\000", :category_id=>"\000'\000W\000N\000'\000"}]#################################################################################################### 

誰能請你告訴我,爲什麼我會收到這樣的字符串,而不是我在CSV文件中輸入簡單的字符串的?因此,它不會被保存到項目表中,我嘗試了所有可能的格式,但似乎沒有任何工作。我想要:name => "Uploaded Item Number 1"而不是:name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0001\000'\000"。任何幫助將不勝感激。在此先感謝:)

+0

這是紅寶石1.9嗎?它是一個猜測,但它可能是一個unicode的東西。順便說一句,你爲什麼要自己分裂? – edmz 2011-03-24 06:20:29

+0

@ lal00是的,它是紅寶石1.9。沒有洞分裂,我沒有得到一排數據。 – Surya 2011-03-24 06:37:09

+1

嘗試使用解析文件 FasterCSV.foreach(「path/to/file.csv」,:col_sep =>';')do | row | #在這裏使用行... 結束 – edmz 2011-03-24 06:43:46

回答

0

在我的頭撞到牆上,並對此問題感到沮喪後,我發現這是我的CSV文件格式不正確(UTF16le),當我做了另一個UTF-8編碼的csv文件,我得到了突破。雖然我剩下一個問題,那就是這樣的字符串::name => "'Uploaded Item number 1'"因此,當它保存到數據庫中時,列中包含的數據是:'上傳的商品編號1'。你有什麼想法,我怎麼能這樣做::name => "Uploaded Item number 1"