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

时间:2015-08-02 02:47:07

标签: ruby-on-rails ruby csv rake rake-task

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

但是他们中的任何一个似乎都没有正常工作,他们只是像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

2 个答案:

答案 0 :(得分:1)

在我看来,你可以走三条路:

1)使用" bad"输入并尝试找到解决方法

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

line.split (" ,")

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

2)尝试使用其他分隔符

导出CSV

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

3)尝试其他CSV解析器

我绝对可以建议您查看其他CSV解析器,例如fasterCSV和其他人(请参阅list of CSV parsers at ruby-toolbox

我希望这是有用的建议 - 样本CSV数据肯定会对您有所帮助。

答案 1 :(得分:1)

是的,所以从我所看到的,正如你自己理解的那样,没有将任何选项传递给解析器。如果未指明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

我同意Swards。我做了很多事情。浏览一些CSV数据可能很有用。