2011-06-23 135 views
0

長話短說。我是RubyOnRails的新手。我的其他開發團隊已經離開了公司,而我是最後一位。我正在接管他們都做的代碼。如何導出csv文件以將所有數據放在多行上?現在,代碼將多個記錄放入csv文件的一行中。RubyOnRails 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 2011/6/23 08:27

999998 AAA001 55554 2011/6/23 08:15

但是,這是它是如何看起來

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

+0

我有點糊塗了,你可以請張貼目前正在生成的CSV文件片段以及您希望生成的假想CSV文件的片段? – basicxman

+0

您使用的是哪種版本的Ruby和Rails以及運行的應用程序的操作系統是什麼? 上面寫的代碼應該按預期打印每筆交易的一行。我已經在Ruby 1.9.2p136 + Rails 3.0.7上對它進行了驗證。 – gcastro

+0

@gcastro - 這就是我的想法。我已經看遍了所有的地方,並且據我所知,語法是正確的,我不知道我錯過了什麼。操作系統是Ubuntu Server 10.10,使用ruby 1.9.2p136是生成csv的地方。然後它被放入AS/400系統。 –

回答

0

我不確定你使用的是什麼CSV插件/寶石。如果它是一個簡單的打開文件並寫入文件的文件,這應該起作用。

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 
0

從評論看來,您的問題並不是真的與RoR代碼有關,而是因爲您正在EBCDIC系統上查看文件。

你需要將文件從ASCII編碼爲EBCDIC轉換(見IBM ASCII TO EBCDIC conversion

基本上你看:

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