我有一个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
答案 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数据可能很有用。