Tag: fastercsv

CSV – 未加引号的字段不允许\ r或\ n(第2行)

尝试解析CSV文件,但仍然收到错误消息未引用字段不允许\ r或\ n(第2行)。 。 我在这里找到了类似的主题,这里有一个提示: CSV.open(‘file.csv’, :row_sep => “\r\n”) do |csv| 但不幸的是他没有用…我无法更改CSV文件,所以我需要在代码中修复它。 编辑 CSV文件样本: A;B;C 1234;… 有什么办法吗? 非常感谢!

在Ruby中读取CSV的最佳方法。 FasterCSV?

我有一个CSV文件,我想用Ruby读取并创建Ruby对象以插入带有Active Record的MySQL数据库。 最好的方法是什么? 我看到两个明确的选项: FasterCSV和Ruby核心CSV 。 哪个更好? 我错过了更好的选择吗? 编辑:Gareth说使用FasterCSV,那么使用FasterCSV读取CSV文件的最佳方法是什么? 查看文档,我看到称为parse , foreach , read , open ……它说foreach “是作为读取CSV文件的主要界面。” 所以,我想我应该使用那个?

Rails FasterCSV“未加引号的字段不允许\ r或\ n”

我遇到了FasterCSV和我的rake db:种子迁移的问题。 我得到错误:“rake aborted!unquoted字段不允许\ r或\ n(第2行)”对以下seeds.rb数据: require ‘csv’ directory = “db/init_data/” file_name = “gardenzing020812.csv” path_to_file = directory + file_name puts ‘Loading Plant records’ # Pre-load all Plant records n=0 CSV.foreach(path_to_file) do |row| Plant.create! :name => row[1], :plant_type => row[3], :group => row[2], :image_path => row[45], :height => row[5], :sow_inside_outside => row[8] n=n+1 end 我已经搜索了这个问题的解决方案,并发现对于很多人来说这是一个UTF-8编码问题。 我已经尝试过要求iconv和:encoding […]

使用FasterCSV替换一个CSV列中的文本

作为相对较新的Ruby,我试图弄清楚如何使用FasterCSV执行以下操作:打开CSV文件,通过其标题选择一列,在此列中仅用y替换所有出现的字符串x,写出新文件到STDOUT。 以下代码几乎可以工作: filename = ARGV[0] csv = FCSV.read(filename, :headers => true, :header_converters => :symbol, :return_headers => true, :encoding => ‘u’) mycol = csv[:mycol] # construct a mycol_new by iterating over mycol and doing some string replacement puts csv[:mycol][0] # produces “MyCol” as expected puts mycol_new[0] # produces “MyCol” as expected csv[:mycol] = mycol_new puts csv[:mycol][0] […]

Heroku文件上传问题

我一直在将CSV文件上传到Heroku并进行处理时遇到问题。 它在我的本地环境中工作正常。 请注意,我不需要在Heroku上保存文件,只需在请求期间访问它,以便将其转换为字符串以进行处理并导入数据库。 我想做的是: 上传CSV文件 删除标题块,具体取决于报告来自哪个网络 将CSV数据读入数据库。 这一步很好。 控制器代码: def create @account = Account.find(params[:report][:account_id]) @file = params[:report][:file].read # logger.info file.inspect case @account.provider when “Microsoft AdCenter” then @file.gsub!(/\A(.*)\n\n/im, “”) when “Google AdWords” then @file.gsub!(/\A(.*)\n/i, “”) else raise “Invalid PPC report format” end end 这是堆栈跟踪: Processing ImportController#create (for XX.182.6.XXX at 2010-09-11 09:19:01) [POST] Parameters: {“commit”=>”Upload”, “action”=>”create”, “authenticity_token”=>”XXXXXwoFpvRO3vN8XVXRDg8rikFsj2TFTW7mrcTgg=”, […]

如何使用Ruby将列标题写入csv文件?

我在使用Ruby将列写入csv文件时遇到问题。 下面是我的代码片段。 calc = numerator/denominator.to_f data_out = “#{numerator}, #{denominator}, #{calc}” File.open(‘cdhu3_X.csv’,’a+’) do|hdr| hdr << ["numerator","denominator","calculation\n"] #< column header hdr << "#{data_out}\n" end 代码将列标题添加到每一行,我只需要在每列数据的顶部。 我在这里和其他地方搜索过,但无法找到明确的答案。 任何帮助将不胜感激。

如何有力地解析格式错误的CSV?

我正在处理政府来源(FEC,州选民数据库等)的数据。 它的格式不一致,这会以各种令人愉快的方式破坏我的CSV解析器。 它是外部采购和权威的。 我必须解析它,我不能重新输入,在输入时validation等。 就是这样; 我不控制输入。 属性: 字段包含格式错误的UTF-8(例如Foo \xAB bar ) 一行的第一个字段指定已知集合中的记录类型。 知道记录类型,您知道有多少字段及其各自的数据类型,但直到您知道。 文件中的任何给定行可能使用带引号的字符串( “foo”,123,”bar” )或不带引号( foo,123,bar )。 我还没有遇到任何在给定行中混合的地方(即”foo”,123,bar ),但它可能在那里。 字符串可以包括内部换行符,引号和/或逗号字符。 字符串可以包括逗号分隔的数字。 数据文件可能非常大(数百万行),因此需要仍然相当快。 我正在使用Ruby FasterCSV(在1.9中仅称为CSV),但这个问题应该与语言无关。 我的猜测是,解决方案需要使用明确的记录分隔符/引号字符(例如ASCII RS,STX)进行预处理替换。 我已经在这里开始了一点但它并不适用于我得到的一切。 如何可靠地处理这种脏数据? ETA:以下是单个文件中可能包含的简化示例: “此”, “是”,123, “一”, “正常”, “线” “行”,“带”“内部”,“引用” “短线”,“有 一个 “内部引用”,1个逗号和 换行符” un“quot”ed,text,with,1,2,3,numbers “引用”, “号码”, “系列”, “1,2,3” “无效\ xAB utf-8”