Rails Rake 任务如何在字段中用逗号解析 CSV

Rails Rake Task How to parse CSV with commas in fields

我有一个 csv,它包含带逗号的浮点数,除了像“34,21”这样的点,我需要在我的 rake 任务中解析它,我已经尝试过一些这样的解决方案: Ruby on Rails - Import Data from a CSV file

但是其中 none 似乎没有正常工作,他们只是像 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) 使用 "bad" 输入并尝试找到解决方法

您可以尝试逐行工作并尝试

line.split (" ,")

假设逗号前有一个空格 space。另一种方法是通过正则表达式识别数值并替换逗号字符(这可能更容易修复源数据!)

2) 尝试用另一个分隔符导出 CSV

这取决于数据的来源。如果您可以重新导出数据,也许这是最简单的解决方案。当然,在这种情况下,您的数据在技术上不再是 CSV,而是例如 SSV(分号分隔值)。

3) 尝试其他 CSV 解析器

我绝对可以建议您看看其他 CSV 解析器,例如 fasterCSV and others (see a list of CSV parsers at ruby-toolbox)

我希望这是有用的建议 - 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 数据可能会有用。