CSV形式の悲劇


2次元のリレーショナルデータと言えば、いまだにCSV形式が主流である。これは、読み込みが楽だというのが主な理由だ。Excelのbookだと読み込みが一筋縄ではいかない。


ところで、このCSV形式、encodingは言うまでもなくshift-jisである。いまさらunicodeに変わられても以前のCSVファイルと互換性がなくなってしまうのでそれはそれで迷惑というものだ。


しかしshift-jisでは国際化の流れに立ち向かうことは出来ない。いい加減、unicode版のCSV形式も用意すべきである。


それはそうと、CSV形式のファイルをExcelで開くといろいろ困ったことが起きる。


例えば、"0123XXXYYY"という電話番号だ。これはすべて数字なので数字としてみなされて先頭の0が除外されてしまう。Excelで開いて保存するだけで電話がかからなくなるので大問題である。CSV形式の顧客リストを2つに分割しなければならないときにExcelで開くとこのような悲劇に逢着するのだ。


かと言ってテキストエディタで開けば解決するのかというとそうでもない。テキストエディタCSV形式のファイルの特定の列を削除するのは至難の技だ。「正規表現で置換してしまえば」と言われるかも知れないが、CSV形式って値を" (ダブルコーテーション)で囲ってescapeすることが出来るので、このダブルコーテーション内に改行が出現したりして正規表現での置換も一筋縄ではいかないのだ。


結局、CSVの読み込みするプログラムを作って、CSVとして書き出すのがよろしいという話になっちゃうんだけど、CSVの読み込みクラスってよく使うわりに、標準で用意されていない。たぶん全世界で100万人ぐらいが車輪の再発明をしているに違いない。


そんなわけで私が以前作ったものを↓に置いておくので好きなように使ってもらって構わない。
http://yaneu.com/yaneurao/hatena/CSVParser.cs


検索キーワード : CSV 読み込み クラス C# .NET Framework