視認性が高い、Comma-Separated Values(CSV)の閲覧方法はないものだろうか。そう思った人がExcelでCSVファイルを開いた時に、主に開発者に起きる悲劇の物語。
CSVのおさらい
簡単に言うと、カラムがCSVで区切られたテキストファイル。標準仕様はIETFが公開している。原文(日本語訳)
コンマで区切られていると、項目毎に表記できるってのが嬉しい。例えば、名前と住所とメールアドレスの一覧を作る時。1カラム目に名前、2カラム目に住所、3カラム目にメールアドレスという具合に記述できる。
これをテキストエディタで開くと名前や住所の長さによってメールアドレスカラムの始まりがずれる。非常に見にくい。
だが表計算ソフトで開くと、あら不思議。綺麗に縦の揃ったデータとして表示してくれる。
Excelで開いて何が悪い!
悪い。閲覧するだけなら微悪だが、保存を行った途端に巨悪になる。そして悪い挙句にシステムの出力が悪いとかのたまう。余計に悪い。さぁ、お前の罪を数えろ。
数値
怪人レベルの悪。
セル幅がせまかったりすると指数表示になる。たぶん表示桁数を少なくして全部を見せようというExcelの涙ぐましい努力だと思う。いや、指数表示されたら元の数字わかんないし。
行末のカンマ
組織を影で操る真の悪。
行末のカンマにも意味はある。「次の項目がある」と示している。表計算ソフトでCSVを見た場合、カンマは表示されないので行の最後は見えない。その上保存した瞬間に行末のカンマを勝手に消す。「CSVファイルをシステムからダウンロードして、項目を書き換えてから運用します!」という手順の場合は注意。項目を書き換える時にExcelを使用すると、行末のカンマを綺麗にデリートしてくれるお掃除上手。
対処法としては、最後のカラムには空になりえない項目を出力するといい。
日付
戦闘員レベルの悪。
日付を「2014/04/01」のような型式で出力した場合、Excelがいい感じに「2014/4/1」としてくれる。「0」はいらないですよ~って。「4」ではなく「04」としているのは、6文字目から8文字目は月を表すって言うふうに読み込み側で制限しているからだと思う。この形式の場合はスラッシュが固定であるので、読み込み側を正規表現で抽出する実装にすればいい。
「2014/04」と出力していた場合はお手上げ。Excelさんが「Apr-14」と、超クールな表記に直してくれる。シビれる!
まとめ
CSVの閲覧性が高いからとかいう理由だけでCSVを開いてはいけない。ましてや保存して運用してはいけない。上に書いたような弊害があることを理解した上でExcelを使用する必要がある。
CSVを見る時はテキストエディタ(最強のテキストエディタ:Vim)を使いましょう。