2011-06-23 3 views
0

ロングストーリー。 RubyOnRailsの新機能です。私の開発チームの残りの部分は会社を去り、私は最後に残っています。私は彼らがしたコードを引き継いでいます。すべてのデータを複数の行に入れるためにCSVファイルをエクスポートするにはどうすればよいですか?現在、コードは複数のレコードをcsvファイルの1行に入れます。 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日8時27分

999998 AAA001 55554 2011年6月23日8時15分

しかし、これはありますそれは見てどのよう

999999 AAA000 55555 2011年6月23日8時27分 999998 AAA001 55554 2011年6月23日8時15分

+0

現在生成しているCSVファイルのスニペットと、生成する仮想CSVファイルのスニペットを表示します。 – basicxman

+0

使用しているRubyとRailsのバージョンは? 上記のコードは、期待通りに取引ごとに1行ずつ印刷する必要があります。私はRuby 1.9.2p136 + Rails 3.0.7でそれを確認しました。 – gcastro

+0

@gcastro - それが私の考えです。私はその場所のいたるところを見てきました。そして、構文が正しかったと言うことができる限り、私は何が欠けているのか分かりません。 OSは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システム上のファイルを見ているようです。

あなたが見ている基本的

IBM ASCII TO EBCDIC conversionを参照)EBCDICにASCIIエンコーディングからファイルを変換する必要があります:あなたが投稿してください可能性があり、私は少し混乱している

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