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 で簡単に書きたいのですが、どうするとスマートなんでしょうか?


回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/09/25 14:38:31
  • 終了:2007/10/02 14:40:04

回答(1件)

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342007/09/25 19:53:33

ポイント60pt

どういう「スマート」さを求めているのかわかりませんが、単に 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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません