人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

id,a,b,c,d
1,0,0,0,1
2,1,1,0,1
3,0,1,1,0

というCSVの横にのびている並びを、

id,question,answer
1,d,1
2,a,1
2,b,1
2,d,1
3,b,1
3,c,2

と横に展開したいのです、(今回は、0は抜いています。)
Ruby で簡単に書きたいのですが、どうするとスマートなんでしょうか?




●質問者: isogaya
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:CSV Ruby にの スマート
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● しおり
●60ポイント

どういう「スマート」さを求めているのかわかりませんが、単に CSV ライブラリーを使った方法ではないということでしょうか?

require 'csv'

CSV.generate(out_path) do |out|
 line_no = 1
 header = nil
 CSV.foreach(in_path) do |record|
 id = record.shift
 if header.nil?
 raise "line #{line_no}: invalid format" if id != 'id'
 header = record
 out << %w(id question answer)
 else
 raise "line #{line_no}: invalid format" if
 id.nil? || record.size != header.size
 record.each_index do |i|
 next if record[i] == '0'
 out << [id, header[i], record[i]]
 end
 end
 line_no += 1
 end
end
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ