CSVって便利だね、スプレッドシートを発明した人は天才だ

仕事上、よくお世話になっているエクセル。
このエクセルからCSVに書き出して、他のアプリケーションに読み込ませる流れが、大量にあるデータ項目を一括で変更するのに大変便利。

このサイトはWordpressで表示されているけれど、これも、ひとつひとつの要素データの集まりで、各記事をCSVに吐き出せば、まとめてタイトルや日付、カテゴリ、タグを修正することができる。他にも商品データや、アドレス帳、その他、データベースを扱うものは、だいたいCSVに対応していたりする。で、このCSVってなんの略か?と疑問に思ったので、調べてみた。

CSVは何の略か

Comma Separated Value

直訳すると、

Comma コンマ

Separated 区切り

Value 値

エクセルのファイル形式選択では、CSV UTF-8(コンマ区切り)って書いてある。

エクセルのファイル保存形式

エクセルの見た目とCSVの見た目の違い

これがエクセルの見た目としましょう。

名称 金額 個数
りんご 100 10
バナナ 200 4
ぶどう 300 2

これをCSV形式で表すとこうなる。

名称,金額,個数
りんご,100,10
バナナ,200,4
ぶどう,300,2

これでもうCSV形式が完成だ。

ここで告白なのだけど、今までCSVだと思っていたのは、TSV(Tab Separated Values)だったことが判明。
前述の通り、エクセルを使うので、その値をそのままテキストエディタに貼り付けると、こういう見え方になる。

名称	金額	個数
りんご	100	10
バナナ	200	4
ぶどう	300	2

わかりづらいのだけど、スペース部分はタブスペース。
テキストエディタだと¥nで表示ができる。

一括置換をする際に、文中に含まれやすいカンマよりも断然使い勝手が良いタブスペースを愛用していたので、いままでCSVを操作していると思っていたのは、実はTSVだったのだ。

つまり、エクセルの表示形式はTSVをベースにしていて、それをファイル形式でCSVにエンコードしていたのだ!

CSVとエクセルとテキストエディタを行ったり来たり

ところで、なんでテキストエディタに噛ませるかというと、柔軟に文字列を操作できるからなのです。
例えば、こういう情報があったとするじゃないですか、

日付 天気 温度
2019年8月3日 晴れ 30℃
2019年8月4日 晴れ 34℃
2019年8月5日 雨 29℃
2019年8月6日 晴れ 33℃

これをエクセルに貼り付けると、こうなっちゃいます。
なぜならタブスペースじゃなくて全角スペースだから。

日付 天気 温度
2019年8月3日 晴れ 30℃
2019年8月4日 晴れ 34℃
2019年8月5日 雨 29℃
2019年8月6日 晴れ 33℃

この全角スペースを、テキストエディタでタブスペースに置換して、エクセルに貼り付けると、ちゃんと区切ってくれるんです。

日付 天気 温度
2019年8月3日 晴れ 30℃
2019年8月4日 晴れ 34℃
2019年8月5日 29℃
2019年8月6日 晴れ 33℃

ちゃんと要素を区切ると何がいいかっていうと、エクセルなら、データのソート機能で並べ替えが楽になるんですね。

日付 天気 温度
2019年8月4日 晴れ 34℃
2019年8月6日 晴れ 33℃
2019年8月3日 晴れ 30℃
2019年8月5日 29℃

並べ替えが楽になると、いろいろなグループ分けや、分析がしやすくなります。
これはデータの量が多ければ多いほど、その恩恵が感じられるのです。

CSVの仲間たち

CSVといえば、comma separated valuesということになっていますが、
コンマ以外の区切りを使うフォーマットがあり、その仲間たちは、

CSV:comma separated values カンマで区切られた値。
TSV:tab separated values タブスペースで区切られた値。

の他に、

SSV:space separated values 半角スペースで区切られた値。
SSV:semicolon-separated valuesセミコロンで区切られた値。

が、あります。SSV、なんで同じ略称にしちゃったんだろうねぇ。
で、この仲間たちをまとめた総称として、

character-separated values(CSV)
delimiter-separated values(DSV)
と呼ぶ。

って、またCSVじゃん!

CSVで頂戴って言っている人が総称なのかコンマ区切りのほうなのか、
割と問題にしていないのは、まぁ、とりあえず区切られていればいいかってことなのかもねぇ。

あとCSVの代わりにXMLを使おうっていう流れもあるみたいだけど、マークアップしたら操作の手間がかかるから、完成データに近く場合のみに使いたい。

参考

https://ja.wikipedia.org/wiki/Comma-Separated_Values
https://www.gixo.jp/blog/2663/
https://www.pc-master.jp/sousa/csv.html