簡體   English   中英

Rails Rake Task如何使用字段中的逗號解析CSV

[英]Rails Rake Task How to parse CSV with commas in fields

我有一個csv,其中包含帶逗號的浮點數,除了像“ 34,21”這樣的點外,我需要在rake任務中對其進行解析,我已經嘗試過以下解決方案: Ruby on Rails-從CSV文件

但是它們似乎都不能正常工作,它們只是像2個字段(32和21)一樣解析它。 有沒有辦法使用內置CSV來解決此問題?

我已經嘗試過了:

task :drugimport, [:filename, :model] => :environment do |task,args|
    CSV.foreach(args[:filename], { encoding: "UTF-8", headers: true, header_converters: :symbol,
        converters: :all}) do |row|
            Moulding.create!(row.to_hash)
        end
end

還有這個:

require 'smarter_csv'
options = {}
SmarterCSV.process('input_file.csv', options} do |chunk|
   chunk.each do |data_hash|
       Moulding.create!( data_hash )
   end
end

除了對包含逗號的字段進行了錯誤的解析之外,它們看上去都非常優美。

這是我的行,對不起,是俄語,但是無論如何: http : //pastebin.com/RbC4SVzz我沒有更改任何內容,所以我粘貼到pastebin,那么在這里會有用得多

這是我的導入日志: http : //pastebin.com/rzC0h9rS

我認為,您可以走三條路:

1)使用“錯誤”輸入並嘗試找到解決方法

您可以嘗試並逐行嘗試,然后嘗試

line.split (" ,")

假設逗號前有空格。 另一種方法是通過正則表達式標識數值並替換逗號字符(這可能更容易固定在源數據上!)

2)嘗試使用另一個分隔符導出CSV

這取決於數據來自何處。 如果您可以重新導出數據,也許這是最簡單的解決方案。 當然,在這種情況下,從技術上講,您的數據將不再是CSV,而是例如SSV(以分號分隔的值)。

3)嘗試其他CSV解析器

我絕對可以建議您看看其他CSV解析器,例如fastCSV和其他(請參閱ruby-toolbox的CSV解析器列表

希望這對您有所幫助-樣本CSV數據一定會對您有所幫助。

是的,根據您的了解,從我所看到的來看,您沒有將任何選項傳遞給解析器。 當不指示row_sep或任何其他形式的選項時, smarter_csv將使用系統換行符,對於Windows機器為"\\r\\n" ,對於unix機器為"\\r"

話雖如此,請嘗試以下操作...

require 'smarter_csv'
SmarterCSV.process('input_file.csv', :row_sep => :auto, :row_sep => ","} do |chunk|
  chunk.each do |data_hash|
    Moulding.create!( data_hash )
  end
end

我同意斯沃德。 我所做的假設有很多事情。 快速瀏覽一些CSV數據可能會很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM