2016-04-05 65 views
1

我有csv文件,其中包含我想在我的Rails應用程序中使用的數據。行看起來像這樣:在Rails中抓取CSV文件

#⇓⇓ ⇓⇓ ⇓⇓    ⇓⇓ ⇓⇓      ⇓⇓  
1ttAAAttAnaattFrench PolynesiattPFttAustralia and Oceaniatt-17.352606tt-145.509956 
2ttAAEttAnnabattAlgeriattDZttAfricatt36.822225tt7.809167 
3ttAAFttApalachicolattUnited StatesttUSttNorth Americatt29.7276066tt-85.0274416 

是否有一個寶石或Ruby庫可以獲取這種類型的csv? (注意tt分離。)

+2

此外,檢查出比Ruby的標準CSV模塊有更好的CSV處理的SmarterCSV。 –

+1

@AnthonyE當推薦一個寶石/圖書館,請添加一個鏈接:https://github.com/tilo/smarter_csv – mudasobwa

回答

4

普通老好Ruby stdlib的CSV會做。在options,應註明:

CSV.foreach("path/to/file.csv", col_sep: "tt") do |row| 
    # use row here... 
end 

另一種選擇是隻逐行讀取一個文件行,做:

line.split(/tt/) #⇒ array 
+0

嘿,你可以添加到smarter_csv寶石的鏈接到答案也可能是一個小信息,它在哪裏是最好的調用這個來保存數據到數據庫中? – Kunok

+1

我不會添加SmarterCSV的鏈接,因爲它在這裏完全不相關。正如所述,我回答了這個問題。無論您對「如何將數據存儲到數據庫中」都懷疑,問一個不同的問題。這個網站有它的規則。 – mudasobwa

+0

好的,我很抱歉。我希望將所有這些東西捆綁到一個地方,這樣人們可以獲得有關各種選項和一些額外相關信息的信息。只要系統讓我來,我就會接受答案。 – Kunok

1

退房SmarterCSV - 它創造的Ruby哈希每個CSV行,您可以重命名列。這樣,您可以直接使用散列來創建或更新Rails模型。例如: -

filename = 'yourfile' 
    options = { 
    :col_sep => 'tt', :chunk_size => 10, 
    :user_provided_headers => %w[attr1 attr2 attr3 attr4 attr5 attr6 attr7] # use the attribute names for your model 
    } 
    SmarterCSV.process(filename, options).each do |array| 
    array.each do |hash| 
     YourModel.update_attributes(hash) 
    end 
    end 

請對所有可用的選項檢查https://github.com/tilo/smarter_csv