dポイントプレゼントキャンペーン実施中!

はじめまして。

勉強中のRuby(2.0)で、
以下のようにCSVファイルの書式変換をしようとしています。

■変換前
# 入力ファイル1(input1.csv)
A, B, C, D
A1,B1,C1,D1
A2,B2,C2,D2
A3,B3,C3,D3

# 入力ファイル2(input2.csv)
B
C

■変換後(output.csv)
B, C, A, D
B1,C1,A1,D1
B2,C2,A2,D2
B3,C3,A3,D3

■変換内容
入力ファイル1に対して、入力ファイル2で指定された文字をヘッダーにもつ列を
順次先頭に移動していき、それを、出力ファイルとする。

■経緯
いろいろ試行錯誤をしながら、以下のような配列(output_ary)を
作るところまではできたのですが、
これをcsvに書き出す術がわからずにおります。

(カッコやダブルコーテーションがついたままになったり、
改行がされなかったり..)

(pp output_ary の結果)

pp output_ary
#=>[["B1","C1","A1","D1"],
["B2","C2","A2","D2"],
["B3","C3","A3","D3"],
["B4","C4","A4","D4"]]

お手数ですが どなたかご教示ください。

もちろん、「上記 output_ary のようなモノを作らなくてもこうすればできるよ」というご回答でもOKです。

よろしくお願いいたします。

A 回答 (3件)

>(できれば こちらの方法で出力する方法も覚えたいのですが.. ^^; )


以下のようにしてください。
----------------------------
CSV::open("output.csv","wb") do |writer|
output_ary.each do |ar|
writer << ar
end
end
-----------------------------
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2013/04/25 17:44

#2です。

windowsで実行する場合ですが
改行コードがCR+LFでファイルへ追加書き込みが希望でしたら
ファイルオープン時、
CSV::open("output.csv","a") do |writer|
としてください。

改行コードがCR+LFでファイルへ上書き書き込みが希望でしたら(以前のファイルの内容は削除されます)
ファイルオープン時、
CSV::open("output.csv","w") do |writer|

としてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
希望通りの結果が得られました。

ブロックも入れ子にしてしまうのですね..
まだ 動きがよく飲み込めていない気がするので、じっくりと確認してみます。

この4日間ほど(笑) 悩んでたことが 今日一日 いや半日で解決して
とてもすっきりしました。

今後も 勉強に励みます。

たいへんありがとうございました! 

お礼日時:2013/04/25 17:47

----以下の行をあなたのプログラムに追加してください------


output_ary.each do |ar|
line = ar.join(",")
print line,"\n"
end
------------------------------------
上記で、画面に出力されます。
ファイルに出力する場合は、リダイレクトしてください。
    • good
    • 0
この回答へのお礼

tatsu99 さん。
ご回答をありがとうございます。
希望通りの CSVファイルが作成できました。

標準出力のリダイレクトででできるのですね.. 

ずっと 
CSV::open("output.csv","a") do |writer|
writer << output_ary
end
..の方法で正しく出力する方法を考えておりました。

(できれば こちらの方法で出力する方法も覚えたいのですが.. ^^; )

ありがとうございました!

お礼日時:2013/04/25 14:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!