RubyOnRails CSV导出

时间:2011-06-23 15:15:45

标签: ruby-on-rails csv export

长话短说。我是RubyOnRails的新手。我的开发团队的其他成员离开了公司,我是最后一个离开的公司。我正在接管他们都做过的代码。如何导出csv文件以将所有数据放在多行上?现在,代码将多个记录放入csv文件中的一行。

class CancelledDealCSVGenerator
  require 'csv'

  def self.generate_csv(deals)
     CSV.open("#{AppConfig.cancelled_csv_folder}/CANNED.CSV", "a") do |csv|
       deals.each do |deal|
        csv << [deal.customer_number, deal.deal_number, deal.contract_number, deal.cancel_date]
       end
     end
  end

end

这就是它应该看起来的样子

999999 AAA000 55555 6/23/2011 08:27

999998 AAA001 55554 6/23/2011 08:15

但这就是它的样子

999999 AAA000 55555 6/23/2011 08:27 999998 AAA001 55554 6/23/2011 08:15

2 个答案:

答案 0 :(得分:0)

我不确定您使用的是什么CSV插件/ gem。如果它是一个简单的打开文件并写入文件的简单文件,那么这应该可行。

class Deal
  def to_csv(delimiter=",")
    [deal.customer_number, deal.deal_number, deal.contract_number, deal.cancel_date].join(delimiter)
  end
end

class CancelledDealCSVGenerator
  require 'csv'

  def self.generate_csv(deals)
     CSV.open("#{AppConfig.cancelled_csv_folder}/CANNED.CSV", "a") do |csv|
       csv << deals.map(&:to_csv).join("\n")
     end
  end

end

答案 1 :(得分:0)

从评论中看起来你的问题不是真正的RoR代码,而是因为你正在查看EBCDIC系统上的文件。

您需要将文件从ASCII编码转换为EBCDIC(参见IBM ASCII TO EBCDIC conversion

基本上你在看:

iconv -f IS08859-1 -t IBM-1047 canned.csv > converted.csv