标签: fastercsv

CSV在Safari视图中呈现,但我希望它下载文件

我已经配置了自定义mime类型:

ActionController::Renderers.add :csv do |csv, options|
  self.content_type ||= Mime::CSV
  self.response_body  = csv.respond_to?(:to_csv) ? csv.to_csv : csv
end
Run Code Online (Sandbox Code Playgroud)

和我的控制器中的respond_to块:

respond_to do |format|
    format.html
    format.csv { render :csv => csv_code}
  end   
Run Code Online (Sandbox Code Playgroud)

使用Firefox和Chrome,.csv呈现给下载的文件.使用Safari,.csv呈现为视图:如何更改此值并强制下载为文件?

查看问题的屏幕截图:

在此输入图像描述

safari ruby-on-rails fastercsv mime-types

5
推荐指数
1
解决办法
3815
查看次数

我如何跳过前三行而不是FasterCSV中的第一行

我正在使用FasterCSV,我正在使用这样的foreach循环

FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|
Run Code Online (Sandbox Code Playgroud)

但问题是我的csv有前3行作为标题...任何方法使quickCSV跳过前三行而不是只有第一行?

ruby rubygems ruby-on-rails fastercsv ruby-on-rails-3

5
推荐指数
2
解决办法
7757
查看次数

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                 
Run Code Online (Sandbox Code Playgroud)

我已经搜索了这个问题的解决方案,并发现对于很多人来说这是一个UTF-8编码问题.我已经尝试过要求iconv和:encoding =>'u',但这会给我错误"UTF-8中的无效字节序列".

我是新手,我无法弄清楚它是否真的是一个我需要破解的编码问题(我一直试图做不成功,如果是这样,我真的可以使用一些指导)或者更可能是我感觉,我已经做了一个简单的失误,并且做了一些错误的方式我设置了seeds.rb,可能还有我的excel - > csv文件.csv文件中没有错误或笨拙的数据.它是简单的单字符串,文本和整数.请帮忙!

ruby migration ruby-on-rails fastercsv

5
推荐指数
2
解决办法
7907
查看次数

加快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 = row[7]
      #eqnt = row[10]
      #esupp = row[12]

        if ename.present? && ename.size>3
        search_condition = "*" + ename.upcase + "*"     

        if esupp.present?
          #supplier = @suppliers.find{|item| item['SUP_BRAND'] …
Run Code Online (Sandbox Code Playgroud)

ruby csv optimization fastercsv

5
推荐指数
1
解决办法
4313
查看次数

用于多个字段的定制Ruby CSV转换器

我正在导入一个CSV文件,其中包含需要转换的字段,如下所示:

  • “ True”(字符串)-> true(布尔值)
  • “假”(字符串)->假(布尔值)
  • “%m /%d /%Y”(字符串格式)->日期对象
  • “%m /%d /%Y%I:%M:%S%p”(字符串格式)-> DateTime对象

默认的CSV转换器与Date和DateTime字段不匹配。下面的这种方法似乎可行,但是想知道是否有更好的方法,可能是通过覆盖转换器使用的匹配模式?

 require 'csv'
 require 'date'

 src = <<csv
 active,date_created,date_modified
 "True","03/12/2012","03/12/2012 2:14:23 PM"
 "False","01/25/2011","03/12/2013 3:14:27 AM"
 csv

 CSV::Converters[:my_converters] = lambda{|field| 
   begin 
     case field.to_s
       when "True"
         true
       when "False"
         false
       when /^\d{2}\/\d{2}\/\d{4}$/
         Date.strptime(field,"%m/%d/%Y")
       else
         DateTime.strptime(field,"%m/%d/%Y %I:%M:%S %p")
       end
   rescue ArgumentError
     field
   end
 }

 csv = CSV(src, :headers => true, :converters => [:my_converters])
 csv.each{|row| puts row}
Run Code Online (Sandbox Code Playgroud)

真实,2012-03-12,2012-03-12T14:14:23 + 00:00

假,2011-01-25,2013-03-12T03:14:27 + 00:00

ruby csv fastercsv

5
推荐指数
2
解决办法
1215
查看次数

使用FasterCSV将不均匀的行转换为列

我有一个CSV数据文件,其行可能有500多列,有些列少了很多.我需要转置它,以便每一行成为输出文件中的一列.问题是原始文件中的行可能并非都具有相同的列数,所以当我尝试数组的转置方法时,我得到:

`transpose':元素大小不同(12应该是5)(IndexError)

是否有替代的转置适用于不均匀的阵列长度?

ruby arrays transpose fastercsv

4
推荐指数
1
解决办法
2104
查看次数

rails 3 ruby​​ 1.9.2 CSV"已初始化常量.."警告

我想添加将数据读取/写入CSV文件到我的某个模型的功能.在1.9之前的ruby版本中,这可以用更快的CS来完成,但现在这是ruby的一部分.我有以下设置:

#in my_model.rb
require 'CSV'

class MyModel < ActiveRecord::Base
   ... stuff ...
   def self.dump_to_csv(file=File.join(Rails.root, 'tmp', 'dump', 'my_model.csv'))
      CSV.open(file, "w") do |csv|
         keys = new.attributes.keys
         csv << keys
         all.each do |m|
            csv << m.attributes.values_at(*keys)
         end
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我来运行测试时,我会收到大量警告

/Users/x/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/csv.rb:201: warning: already initialized constant VERSION
/Users/x/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/csv.rb:863: warning: already initialized constant FieldInfo
/Users/x/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/csv.rb:866: warning: already initialized constant DateMatcher
... 
Run Code Online (Sandbox Code Playgroud)

我该如何删除这些警告?

csv ruby-on-rails fastercsv ruby-on-rails-3 ruby-1.9.2

4
推荐指数
1
解决办法
1479
查看次数

Rails3 CSV put&quot;&quot; 而不是实际的报价

类似于这个问题,除了我不在html_safe整个项目的任何地方使用.

我生成一个CSV文件,index.csv.erb如下所示:

<%=
response.content_type = 'application/octet-stream'
CSV.generate do |csv|
  @persons.each do |person|
    csv << [ person[:name], person[:nickname] ]
  end
end
%>
Run Code Online (Sandbox Code Playgroud)

问题:如果数据库中的昵称为NULL(ActiveRecord/MySQL),则CSV文件关联元素变为&quot;&quot;.我希望"",甚至一无所获.

结果文件示例:

Nicolas, Nico
Joe, &quot;&quot;
Run Code Online (Sandbox Code Playgroud)

我怎样才能防止这种情况发生?

csv fastercsv html-safe ruby-on-rails-3

4
推荐指数
1
解决办法
1995
查看次数

如何进一步处理导致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
}
Run Code Online (Sandbox Code Playgroud)

MalformedCSVError是在csv.shift方法中引起的.如何从rescue子句中访问导致错误的数据?

ruby fastercsv

4
推荐指数
1
解决办法
3996
查看次数

更快的CSS为ruby 1.9.3?

我正在尝试以CSV格式文档导出报告.为此,我使用了更快的CSV,但我面对

Please switch to Ruby 1.9's standard CSV library.
It's FasterCSV plus support for Ruby 1.9's m17n encoding engine.
Run Code Online (Sandbox Code Playgroud)

错误.任何人都可以帮我解决这个错误吗?我的代码如下

csv_string = FasterCSV.generate do |csv|
  csv << ["Client_name", "Created_at", "User type"]
  @client_reports.each do |client_reports|
    csv << [client_reports.email, client_reports.created_at,client_reports.role_name]
  end
end
send_data csv_string,
  :type => 'text/csv; charset=iso-8859-1; header=present',
  :disposition => "attachment; filename=product_stock.csv"
Run Code Online (Sandbox Code Playgroud)

所以请帮我在Ruby 1.9.3中解决这个问题.它在Ruby 1.8.7中运行良好.

或者,如果您可以向我推荐任何其他资源,请帮我解决这个问题?

ruby-on-rails fastercsv export-to-csv

4
推荐指数
1
解决办法
4207
查看次数