我“M在每天预定耙的任务,将下载一个CSV自动发送每天的Dropbox,分析它,并保存到数据库中工作。我无法控制数据输入到生成CSV报告的程序的方式,因此我无法避免在某些数据中使用双引号。但是,我想知道是否有一种方法可以在rake任务中删除或用单引号替换它们,或者以某种方式通知解析器,使其不会抛出此错误。红宝石:CSV解析器绊倒双引号中我的数据
Rake任务代码:
require 'net/http'
require 'csv'
require 'open-uri'
namespace :fp_import do
desc "download abc_relations from dropbox, save as csv, create or update record in db"
task :fp => :environment do
data = URI.parse("<<file's dropbox link>>").read
File.open(Rails.root.join('lib/assets', 'fp_relation.csv'), 'w') do |file|
file.write(data)
end
file= Rails.root.join('lib/assets', 'fp_relation.csv')
CSV.foreach(file) do |row|
div, fg_style, fg_color, factory, part_style, part_color, comp_code, vendor, design_no, comp_type = row
fg_sku = fg_style + "-" + fg_color
part_sku = part_style + "-" + part_color
relation = FgPart.where('part_sku LIKE ? AND fg_sku LIKE?', "%#{part_sku}%", "%#{fg_sku}%").exists?
if relation == false
FgPart.create(fg_style: fg_style, fg_color: fg_color, fg_sku: fg_sku, factory: factory, part_style: part_style, part_color: part_color, part_sku: part_sku, comp_code: comp_code, comp_type: comp_type, design_no: design_no)
end
end
end
end
有这个CSV约35000行。以下是一个示例。您可以在示例的第4行中看到双引号。
的样本数据:
"01","502210","018","ZH","5931","001","M","","UPHOLSTERED GLIDER A","RM"
"01","502310","053","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","502310","065","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","502312","424","ZH","25332","NO","O","","UPHOLSTERED GLIDER"AUS"","BAG"
"01","","277","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","503310","076","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","506210","018","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","506210","467","ZH","25332","NO","O","","UPHOLSTERED GLIDER","BAG"
"01","507610","932","AZ","25332","NO","O","","GLIDER","BAG"
"01","507610","932","AZ","5936","001","M","","GLIDER","RM"
@Flip我不知道,如果你的修正是正确的。 @ Tatiane:csv数据中的'**'部分还是他们用来标记关键代码? 。 – knut
如果所有的数据都与此类似提取物可能会删除所有“您使用CSV之前 – knut
@knut:我明白了,你可能会right..will撤消部分感谢它指向了 – Flip