Tag: fastercsv

将嵌套实体导出到CSV文件

我有一个带有一些嵌套数据的rails应用程序,我想将其导出为CSV文件 模型看起来像: class ContainerRecord < ActiveRecord::Base has_many :child_records 和 class ChildRecord < ActiveRecord::Base belongs_to :container_record 我希望能够将每个ContainerRecord的CSV文件导出到一行,其中包含前几列中的信息,以及其余列中每个ChildRecord的值。 我不能保证与每个ContainerRecord关联的ChildRecords的数量,我不在乎每行是否有不同数量的非空列。 我试图使用FasterCSV,但我将子记录的所有数据推入一列而不是每列的列。 这是我可以用FasterCSV做的事吗? 如果没有,我可以用什么方法来实现我的目标?

Ruby刮刀。 如何导出到CSV?

我写了这个ruby脚本来从制造商网站上搜集产品信息。 在数组中抓取和存储产品对象有效,但我无法弄清楚如何将数组数据导出到csv文件。 抛出此错误:scraper.rb:45:main:Object的未定义方法`send_data’(NoMethodError) 我不明白这段代码。 这是做什么的,为什么它不正常? send_data csv_data, :type => ‘text/csv; charset=iso-8859-1; header=present’, :disposition => “attachment; filename=products.csv” 完整代码: #!/usr/bin/ruby require ‘rubygems’ require ‘anemone’ require ‘fastercsv’ productsArray = Array.new class Product attr_accessor :name, :sku, :desc end # Scraper Code Anemone.crawl(“http://retail.pelicanbayltd.com/”) do |anemone| anemone.on_every_page do |page| currentPage = Product.new #Product info parsing currentPage.name = page.doc.css(“.page_headers”).text currentPage.sku = page.doc.css(“tr:nth-child(2) […]

使用FasterCSV gem解决CSV解析的基本问题

我发现了FasterCSV(1.5.0)的CSV解析问题,这似乎是一个真正的错误,但我希望有一个解决方法。 基本上,当字段用引号括起来时,在分隔符后面添加一个空格(在我的例子中是逗号)会生成MalformedCSVError 。 这是一个简单的例子: # No quotes on fields — works fine FasterCSV.parse_line(“one,two,three”) => [“one”, “two”, “three”] # Quotes around fields with no spaces after separators — works fine FasterCSV.parse_line(“\”one\”,\”two\”,\”three\””) => [“one”, “two”, “three”] # Quotes around fields but with a space after the first separator — fails! FasterCSV.parse_line(“\”one\”, \”two\”,\”three\””) => FasterCSV::MalformedCSVError: Illegal quoting on […]

加快csv导入

我想导入大量的cvs数据(不是直接导入AR,但经过一些提取后),而且我的代码非常慢。 def csv_import require ‘csv’ file = File.open(“/#{Rails.public_path}/uploads/shate.csv”) csv = CSV.open(file, “r:ISO-8859-15:UTF-8”, {:col_sep => “;”, :row_sep => :auto, :headers => :first_row}) csv.each do |row| #ename,esupp= row[1].split(/_/) #(ename,esupp,foo) = row[1]..split(‘_’) abrakadabra = row[0].to_s() (ename,esupp) = abrakadabra.split(/_/) eprice = row[6] eqnt = row[1] # logger.info(“1) “) # logger.info(ename) # logger.info(“—“) # logger.info(esupp) #—- #ename = row[4] #eprice […]

将CSV数据导入ruby数组/变量

我正在尝试使用CSV作为SiriProxy项目插件中的设置文件来使用wake-on-lan。 这个项目基于ruby。 所以csv如下: Name, MACAddress Desktop, 01-23-45-67-89-ab Computer, 02-46-81-02-46-cd 等等… 所以我想要发生的是,例如,当变量userAction是“桌面”时,我查询CSV并将MAC地址返回到另一个变量。 我迷失了如何做到这一点。 我见过csv和faster_csv,但不知道如何让这些工作像这样。 提前致谢!

根据另一个CSV中的值从一个CSV中提取值

我试图找出根据master.csv的值从名为lookup.csv的CSV文件中提取值的最佳方法,然后将新文件另存为output.csv 。 在下面的示例中,主文件有三列数据,最后一列是City 。 我想用lookup.csv文件中的City Code替换City名称。 我没有可以查找的数据库,所以我不得不使用CSV文件。 我试图使用FasterCSV与Ruby 1.8.7。 示例文件结构: master.csv: First Name | Last Name | City Joey | Jello | Atlanta Home | Boy | Dallas lookup.csv: City | City ID Atlanta | 12345 Dallas | 12346 Houston | 12347 output.csv: First Name | Last Name | City Joey | Jello | 12345 […]

FasterCSV:几个分隔符

我的Rails3应用程序解析用户上传的CSV文件。 可以预料,用户会上传以制表符分隔的AND逗号分隔文件。 我想支持两者。 我的代码: input = CSV.read(uploaded_io.tempfile, { encoding: “UTF-8”, :col_sep => “\t”}) 问题:如何更改它以支持逗号? FasterCSV的doc将col_sep描述为The String placed between each field. 所以:col_sep => “,\t”将无效。 注意:内部的所有数据都是整数或标识符,因此在内容(而不是分隔符)中使用\t或者\t的人的概率为零。 因此,在同一文件中使用两个不同的分隔符并不是我明确希望防止的。

在Rails中批量导入CSV?

我正在使用FasterCSV将上传的文件导入到模型中,并且它适用于小文件。 但是,当我尝试导入大型数据集(21,000行)时,需要很长时间才能在实时服务器上获得浏览器超时。 这是我目前的工作代码: logcount=0 Attendee.transaction do FCSV.new(file, :headers => true).each do |row| row[1] = Date.strptime(row[1], ‘%m/%d/%Y’) record = @event.attendees.new(:union_id => row[0], :dob => row[1], :gender => row[2]) if record.save logcount += 1 end end end 我喜欢使用后台进程,但用户需要先查看导入的行数,然后才能进入系统的下一步。 所以,我认为我应该使用动作分块 ,只读取少量行,设置一个计数器,然后用某种进程更新视图,然后使用前一个计数器作为起点再次运行该方法。 我似乎无法看到如何让FasterCSV只读取一定数量的行,并设置起点的偏移量。 有谁知道如何做到这一点? 或者有更好的方法来处理这个问题吗?

如何进一步处理导致Ruby FasterCSV库抛出MalformedCSVError的数据行?

传入的数据文件包含格式错误的CSV数据(如非转义引号)以及(有效)CSV数据(如包含新行的字段)。 如果检测到CSV格式错误,我想对该数据使用替代例程。 使用以下示例代码(简称为简称) FasterCSV.open( file ){|csv| row = true while row begin row = csv.shift break unless row # Do things with the good rows here… rescue FasterCSV::MalformedCSVError => e # Do things with the bad rows here… next end end } MalformedCSVError是在csv.shift方法中引起的。 如何从rescue子句中访问导致错误的数据?

ruby 1.9.2中的fastercsv错误

我有一个现有的rails应用程序我正在运行ruby 1.9.2和linux它的rails版本 rails 2.3.8 它也有一个GEMFILE,在它的vendor / gems目录下它有’fastercsv-1.5.4’的gem 在其迁移中(在两次迁移中)它需要gem’fastercsv’ require ‘fastercsv’ 但是,当我这样做 rake db:migrate 它没有通过迁移声明 “请切换到Ruby 1.9的标准CSV库。它是FasterCSV加上对Ruby 1.9的m17n编码引擎的支持。” 我发现消息来自gems’fast_csv.rb’文件。 因为它有条件检查ruby版本 if RUBY_VERSION >= “1.9” class FasterCSV def self.const_missing(*_) raise NotImplementedError, “Please switch to Ruby 1.9’s standard CSV ” + “library. It’s FasterCSV plus support for ” + “Ruby 1.9’s m17n encoding engine.” end def self.method_missing(*_) const_missing […]