見出し画像

CSVの歴史

今でもテキストデータのエクスポートやインポートでよく使われるCSV形式というファイルがあります。CSVとは”Comma-Separated Values”の事で、データを2次元の行と列で表した「フラットデータベース」形式のひとつで、列をカンマ(,)で、行を改行で区切ったテキストです。

Comma-Separated Values

フラットファイルデータベース

その歴史は古く、1972年にはIBMの大型機でサポートされていることがわかっているので、この世にパソコンが誕生した時点では既に使われていたようです。

CSVファイルとは?

そもそもBASICのINPUT文の仕様は、カンマで区切った数字や文字列を読み込むようになっているのは、この形式が既に一般的なものだったからでしょう。この仕様のお陰でキーボードからカンマを入力することが出来なかったので、プログラムを書く時にはもっぱらLINE INPUT文のお世話になったわけです。

CSVの最大の問題は、細かな規定が存在せず、その時その時の都合で実装が繰り返されたことで、データの中にカンマが含まれている場合や、空白の扱いがケースバイケースで、改行コードも含めデータとして表現されている文字コードの種類に関しての取り扱いも決まっていないことです。

例えば、データ中にカンマや空白文字が含まれている場合のみダブルクォートで囲んだりすることもありますが、そうでない場合も常にダブルクォートで囲むこともあります。その場合は今度はデータの中に含まれるダブルクォートの扱いに困り、ダブルクォートが含まれるとシングルクォートで囲むという実装もあります。また囲む記号を変えるのではなくエスケープ表現を取り入れているケースも有りました。改行コード問題は一般的なテキストの話と同じで、CRなのかLFなのか、はたまたCR+LFなのかはOS次第で、これを正しく解釈できないと全体がひとつの行になってしまいます。最近では文字コードがいずれかのUTFを使うことで、マルチバイト文字を扱うことが多いとはいえ、0x7f以上のコードはすべてエスケープ形式を要求したり、シフトJISであったり、全体がUNICODEで表現しているケースもあります。今でもExcelがコードページ依存のシフトJISを出力するのは悩みの種です。

【CSVにおける文字化け】原因や解消方法まで分かりやすく解説

こんなCSVも2005年にはRFCで、ファイルフォーマットが規定され、MIMEタイプの”text/csv”として定義もされました。

RFC4180

今は基本的には、このRFCに沿って実装されており、pythonには便利なcsv.pyという標準ライブラリがあって、このライブラリを使えばCSVファイルをpythonの持つデータ形式に変換してくれるので、随分と楽になりました(他の言語ではどうしているのかな?)。

そもそも区切り文字にデータに含まれうるカンマを使ったが間違いと考えることも出来、列区切りも行区切りも制御コードにすれば話はだいぶシンプルになるということで、今はTSV(Tab-Separated Values)を好む人も増えています。

Tab-Separated Values

問題があるとすれば、単に表示しただけでは見た目で空白とタブの区別がつかないことで、表示の際に一時的に置換したり、テキストエディタの設定でタブ文字を目に見える形式で扱えるようにするなどして使うことになります。もっともあくまでデータ交換用のファイル形式であることを考えれば、ファイルを直接いじるのはナンセンスという考え方もありますけどね。

ということで、CSVは長い長い歴史を持つので、これからもなかなか廃れることはなさそうです。プログラミングの勉強をする時に、このCSVファイルをパースして表示したり、自身の持つデータをCSVファイルで出力するようなコードを書くのはなかなか良い練習になります。ちゃんとパーサを設計するのも良し、その場でモードを切り替えて出力するのも良し、言語の特性に合わせてどんな書き方が出来るか挑戦してみてください。そして既存のツールと比べることで結果のテストは出来るはずです。

ヘッダ画像は、いらすとやさんの素材を使いました。https://www.irasutoya.com/2018/06/blog-post_923.html

#ファイル形式 #CSV #カンマ #改行 #TSV #文字コード #python

この記事が気に入ったらサポートをしてみませんか?