MySQLからCSVをダンプした後にするべきたった一つの修正

 毎回なんかすごい苦労してアドホックに解決してきたが、毎回苦労するのにうんざりしてきたので、頑張って調べてみた。正しい(と思う)手順を書いておく。
 まず、MySQLからCSV形式でダンプするときに、ちゃんとenclosed byとescaped byをつけておくべきである。mysqlコマンドでデータベースに接続して、

select * from tablename into outfile '/tmp/output.csv' fields terminated by ',' enclosed by '"' escaped by '\\' lines terminated by '\r\n';

 で出力する。しかし、これだとダブルクォートもバックスラッシュでエスケープされることになり、このエスケープはRubyCSVパーザでは受け付けてくれない(一般的な方法はダブルクォート2つらしい)ので、悲しい事になる。なので、\"というところを探して""で置き換える。適当にスクリプト書いてやっつけた。

#!/usr/bin/env ruby

require 'fileutils'

filename = ARGV[0]
wfp = open(filename + ".tmp", "w")
open(filename, "r").each{|line|
  wfp.write(line.gsub("\\\"", "\"\""))
}
wfp.close
FileUtils.mv(filename + ".tmp", filename)

 これでもう次からは大丈夫だ!
 RubyCSVモジュール、\"をパースしてくれないのは別にいいんだけど、パースに失敗した時に、どこで失敗したのか教えてほしいな…。そういうの自分で書くべきか。kindcsvとかそんな名前で。