CSVライブラリを久々に使う
というのは、自分がCSVを扱うときはcsvscanを使ってたからです。
http://raa.ruby-lang.org/project/csvscan/
Rubyで配列から特定の添字だけ削除する - rubyneko
http://ujihisa.nowa.jp/entry/91c50b5a16
より。やってみる。
require 'csv' src = './flag.data' dest = './hehehe' rows = [] CSV.open(src, 'r') do |row| rows << row.map{|s| Integer(s) rescue nil }.compact end CSV.open(dest, 'w') do |w| rows.each{|row| w << row } end
例になっているCSVでは大丈夫っぽいですが、Integer()は空文字列だと
ArgumentErrorにならずに0を返します。なので空なカラムがありうる時は
#... rows << row.map{|s| begin s.empty? ? nil : Integer(s) rescue ArgumentError nil end }.compact #...
と、ちょっと厳密に調べてやる必要がありますね。