【发布时间】:2015-10-24 10:16:24
【问题描述】:
我有一个 csv,其中包含带逗号的浮点数,除了像“34,21”这样的点,我需要在我的 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
【问题讨论】:
-
这是一个想法... 取您的 csv 行并用点替换逗号,并在解析后反转更改。
"foo,bar,foo,baz,foo,bar".gsub(",", ".") -
@TimKos 感谢您的回复,但我想这不是一个合适的解决方案,因为我需要手动检测打开\关闭引号并在其中找到一个逗号然后替换,我想有一个内置解决方案更加优雅和简单,在php中解析此类文件非常容易,我猜rails也有解决方案
-
在这种情况下,您能否使用用于解析 CSV 文件的代码更新您的答案?虽然我同意您对先前解决方案中缺乏“优雅”的看法,但我认为对于 Rails,某种形式的正则表达式将不可避免地是必要的。不过让我们先看看
-
@TimKos 是的,当然,查看更新
-
很高兴看到你的 csv 的几行是什么样的。
标签: ruby-on-rails ruby csv rake rake-task