導入:最強にシンプルなファイル形式
世の中には複雑なファイル形式がたくさんあります。Wordの「.docx」、Excelの「.xlsx」、画像の「.png」……。
これらの中身をメモ帳で開くと、よくわからない文字(バイナリ)が表示されて解読不可能です。
しかしCSVとTSVは違います。
メモ帳で開いてもちゃんと読める。「Aさん, 20歳, 東京都」と書いてある。
彼らは「テキストファイル界の良心」です。
しかしその「単純さ」ゆえに、世界中のプログラマと事務担当者を泣かせ続けているのです。
CSV:カンマ(,)という「諸刃の剣」
CSV(Comma-Separated Values)は、その名の通り「カンマ(,)で値を区切る」というルールです。
佐藤, 鈴木, 田中
これなら平和です。カンマがあるところで「あ、次は別の人だな」と分かります。
しかし世界には「データの中にカンマを入れたがる人」が存在します。
例えば住所。「東京都港区1-1, メゾン田中101号室」のように。
これをCSVのルールで読むと、システムは大パニックになります。
「え? ここで区切り? 『メゾン田中』は次の列なの?」
結果、住所が真っ二つに割れ、カラム(列)がズレてデータは大惨事になります。
これを防ぐために「ダブルクォーテーション(”)」で囲むという、つぎはぎのような防御策(”東京都, 港区”)が取られますが、そのクォーテーションすらデータに含まれていたら……?
CSVは、いつ崩れるかわからないジェンガのような危うさを秘めているのです。
TSV:見えない「タブ」は信頼できる男
そこで登場するのがTSV(Tab-Separated Values)です。
カンマの代わりに「タブキー(Tab)」の空白で区切ります。
TSVの強みはただ一点。
「文章の中に『カンマ』を使う人はいるが、文章の中に『タブ空白』を入れる変人は滅多にいない」という経験則に支えられています。
住所や自己紹介文にタブキーを連打する人はまずいません。
だからTSVはズレにくい。非常に堅牢です。
でもTSVにも弱点があります。それは「目に見えないこと」。
パッと見だと「これ、スペースキーで空けた隙間なの? それともタブなの?」が分かりません。
見えないがゆえに無視されがちな、不器用な職人のような形式です。
真の敵は「Excel」というおせっかい母ちゃん
CSVやTSVを作ったり編集したりするとき、人類が一番使うツールはMicrosoft Excelです。
しかしExcelは「おせっかい焼きのオカン」のような性格をしています。CSVを開いた瞬間、頼んでもいないのにデータを「整頓(破壊)」し始めます。
「0落ち」事件
電話番号 09012345678 を見つけたExcelオカン。
「あらあら、数字の頭にゼロなんて意味ないじゃない!消しておくわね!」
結果:9012345678 (電話がつながらなくなる)
「勝手に日付」事件
住所の番地1-1を見つけたExcelオカン。
「あらあら、これは1月1日のことね! 気が利くでしょ?」
結果:1月1日 (住所が消滅する)
CSV運用におけるトラブルの多くは、この「Excelで開いて保存した瞬間」に起きています。
「CSVを!Excelでそのまま保存するな!」と叫ぶプログラマもいることでしょう。
まとめ
- CSV(カンマ区切り)
世界標準。でもデータ内のカンマに弱い。「佐藤, 裕美」さんみたいに名前にカンマが入ると死ぬ。 - TSV(タブ区切り)
カンマより安全。でも見えないから一般人には敬遠されがち。 - Excelの罠
CSVを便利に開いてくれるが、保存するときに「0」を消したり「日付」に変えたりしてデータを破壊神の如く荒らしていく。
教訓
CSVは「メモ帳で開ける」と安心させておいて、編集には細心の注意を要する「取り扱い注意」の代物です。
もし同僚からCSVをもらって、電話番号の先頭の「0」が消えていたら、「ああ、Excelで開いて上書き保存したんだな…」と思って生温かい目で見守ってあげてください。


コメント