質問: ruby初心者です。csv形式データを読みこみ、内容を変えて書き出すことができません。 csv形式データは ``` a,b,c,d,e,f,, あ,い,う,え,お,か,き,く ``` のようになっていて、これを ``` a,b b,c c,d d,e e,f あ,い い,う う,え え,お お,か か,き き,く ``` のように「単語を2つ取り出し、並べる」かつ「前行の2つ目の単語を重複させる」ということをしたいです。 自分なりに書いてみたのですが、うまくいきませんでした。 ``` require "csv" csv_date1=CSV.read("sample.csv") CSV.open("out.csv","wb") do |csv| csv_date1.each do |row| row.compact.reject(&:empty?) for i in 0..10 do csv.puts("#{row[i]},#{row[i+=1]}\n") end end end ``` また「空配列が出てきたら取り除く」と「単語の数にあった配列を作る」のようにしたいです。 6行目の"row.compact.reject(&:empty?)"では空配列が取り除けませんでした。 例えば上のcsvデータの場合、fのあとの空配列を取り除く。 また一行目は6単語なので、それを組み合わせた5行。二行目は8単語なのでそれを組み合わせた7行。 つたない文章でわかりずらいところも多く、自分自身も知識不足で申し訳ないのですが、よろしくお願いします。
回答: > > row.compact.reject(&:empty?) > > > ですがcompactだけでnilを取り除きます。p row と p row.compactを付け加えて確かめてください。 それとArrayの要素を2要素ずつ(n要素ずつ)重複ありで区切り、 ブロックに渡して繰り返す便利なメソッドがあります。リファレンス each_cons(2)