Comma-Separated Values
テンプレート:Infobox file format
comma-separated values(略称:CSV)は、いくつかのフィールド(項目)をカンマ「,
」で区切ったテキストデータおよびテキストファイル。拡張子は .csv
、MIMEタイプは text/csv
。
「comma-separated variables」とも言う。広く普及した訳語はないが、「カンマ区切り」などとも呼ばれる。Microsoft Excelでは「CSV (カンマ区切り)」としている。
データ交換用のデファクトスタンダードとして、古くから多くの表計算ソフトやデータベースソフトで使われているが、細部の実装はソフトによって異なる。それらを追認する形で、2005年10月、RFC 4180 で Informational(IESGの外部で決定された有用な情報の提供)として仕様が成文化された。
類似したフォーマットとして、タブ区切りされた tab-separated values (TSV)や、半角スペース区切りされた space-separated values (SSV) などがあり、これらをまとめて character-separated values (CSV)、delimiter-separated values とも呼ばれることも多い。
仕様
RFC 4180に述べられた仕様について述べる。
ファイルは1つ以上のレコードからなる。レコードは改行(CRLF、U+000D U+000A)で区切られる。最後のレコードの後には改行はあってもなくてもいい。
レコードは1つ以上の同じ個数のフィールドからなる。フィールドはコンマ「,」(U+002C) で区切られる。最後のフィールドの後にはコンマは付けない。
(以下の例では、読みやすさのためにCRLFの前にスペースを書くが、実際はないものと思って読んで欲しい)
日本国,東京,127767944 CRLF アメリカ合衆国,ワシントン,300007997 CRLF …
なお、最後のフィールドの後にはコンマはないので、もしレコードがコンマで終わっているように見えれば、実際はその後に空文字列(長さ0の文字列)からなるフィールドがある。次のレコードは、「日本国」「東京」「」の3つのフィールドからなる。
日本国,東京, CRLF
ファイルの先頭には、オプションとして、通常のレコードと同一の書式の「ヘッダ行」があってもいい。ヘッダ行は、他のレコードと同じ個数のフィールドを持ち、フィールドの名称が書かれている。
国,首都,人口(2006) CRLF 日本国,東京,127767944 CRLF アメリカ合衆国,ワシントン,300007997 CRLF …
フィールドは、ダブルクォート「"」(U+0022) で囲んでも囲まなくてもよい。次の3つのレコードは、(文字列としては)同じ内容である。(ただし、RFCはフィールドの解釈までは規定していない。一部のソフトはダブルクォートで囲まれているかどうかで解釈を変える)
日本国,東京,127767944 CRLF "日本国","東京","127767944" CRLF "日本国","東京",127767944 CRLF
フィールドがコンマ、ダブルクォート、改行を含む場合は、かならずダブルクォートで囲む。また、フィールドに含まれるダブルクォートは2つ並べてエスケープする。次のレコードの内容は、「日本[改行]国」「"東京"」「127,767,944」である。なお、ここでいう「コンマ」「ダブルクォート」はU+002CとU+0022のことで、他のもの(たとえば全角コンマ)は関係ない。ただし、「改行」にはCR (U+000D) とLF (U+000A) を含む。
"日本 CRLF 国","""東京""","127,767,944" CRLF
背景
コンピュータ内部において、データベース内のテーブルや表計算ソフトの表の内容は、それぞれのソフトウェアが処理可能な独自のファイルフォーマットで保存されており、別のソフトウェアへデータを移そうにも基本的には互換性はない為に読み込む事はできない。
カンマ区切りテキストは、テキスト形式で保存されるので、テキストエディタでも閲覧や編集ができる。さらに、使用するソフトウェアが、カンマ区切りテキストの出力 (エクスポート) と、読み込みから表への生成 (インポート) に対応していれば、別製品のデータベースソフトや表計算ソフトからのデータ交換が可能となる。
しかし、「テキスト形式」や「日付形式」といった各項目に設定している属性は出力されないので、インポートする側のソフトウエアがインポートする際に設定しなくてはいけない。
パソコンの表計算ソフトが流行して以降、非常によく利用されるようになった。大型コンピュータとのデータのやりとりでは固定長データフォーマットがよく利用される。現在では、XMLを使おうという動きもあるが、主流にはなっていない。
問題点と回避策
レコードにコンマやダブルクォートが含まれている場合、エスケープされている場合でも、ソフトによって解釈が異なり、区切り方が変わることがある。その結果、データが破壊されることや、修正の手間が生じることがある。レコードにタブ文字が含まれている場合よりも、レコードにコンマやダブルクォートが含まれている場合のほうが多い。従って、CSVの代わりに、タブ区切りテキスト形式(TSV)を使うことで問題を避けられることがある。
実装
CSVの実装には、各社独自の拡張や制約がある。ただし、歴史的に見れば、これらの実装のほうが RFC 4180以前 から存在している。
- レコード区切り文字列
- CR LF を区切り文字列として扱わない処理系がある。
- フィールド区切り文字
- 全角コンマ「,」を区切りとみなす処理系がある。
- ダブルクオート文字の表現
- ダブルクォート文字を表現する方法として「ダブルクォートで重ねる」処理系と、「バックスラッシュを前につける」処理系が存在する。
- ダブルクオート文字の有無
- 多くのソフトは、必要なときのみフィールドをダブルクォートで囲む。ただし、そうでないファイルも読み取れる。
- フィールド数
- 読み取りファイルのフィールド数が一定でない場合、ほとんどのソフトは、空文字列(長さ0の文字列)からなるフィールドを適宜追加して数をそろえる。
- 空行、フィールド数が0個のレコード
- 空行を全てのフィールドが空文字列であるとして処理する処理系と、空行を無視する処理系がある。
- 注釈
- 特定の書式の文字列を注釈行として扱う処理系がある。
character-separated values
コンマの代わりに別の文字を区切りに使ったフォーマットもあり、まとめて character-separated values、delimiter-separated values と呼ぶ。
代表的なものに以下のようなものがある。
- タブ - tab-separated values (TSV) - MIME type は
text/tab-separated-values
- スペース - space-separated values (SSV)
- セミコロン - semicolon-separated values(SSV)
関連項目
外部リンク
- RFC4180 (Common Format and MIME Type for Comma-Separated Values (CSV) Files)
- RFC4180・日本語訳
- 疑似テーブル等をTSVに変換するアプリ