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
#...

と、ちょっと厳密に調べてやる必要がありますね。