資料室/CSV形式

カンマ区切りのテキスト形式の標準的なフォーマットであるCSV形式についてのメモです。

様々なソフトでCSV形式が扱われていますが、ちゃんとした規格が定められていなかったため、二重引用符(”)の扱いなど互換性が無い場合もあるようです。

後付という形ですが、2005年にRFC 4180としてCSV形式についてまとめられています。

基本ルール

  • 各レコードは改行(CR LF)によって区切られる。ファイル終端は改行は無くても構わない。
  • 各レコードは1つ以上のフィールドを含む。フィールドはカンマで区切る。
  • スペースはフィールドの一部として扱う。
    最後のフィールドはカンマで終わっていはいけない。
  • 各フィールドは二重引用符(ダブルクォーテーション)で囲んでも囲まなくても構わない。
  • しかし、フィールドの値に「改行」「二重引用符」「カンマ」が含まれる場合は、囲まなくてはならない。
  • 二重引用符で囲まれたフィールドに、二重引用符を含む場合は連続して記述("")し、エスケープする。

私的懸念事項

私自身が今まで考えていた扱いと異なるのは2点。

  • フィールド内に改行を含むことが可能になっている。
  • 最後のフィールドはカンマで終わってはいけない。

ファイルからテキストモードで1行ずつ読んで・・・といった形が取れないので、少々面倒な仕様になっている。
また、最後のフィールドがカンマで終われないとすると、最後のフィールドが空欄だったらどう記述したら?あ、二重引用符で空文字にすればいいのか。

キャラクタコード

COMMA 0x2C
CR 0x0D
LF 0x0A
DQUOTE 0x22
CRLF 0x0D 0x0A
TEXTDATA 0x20-0x21, 0x23-0x2B, 0x2D-0x7E

マルチバイト圏としては8ビットコードが除外されてるのが気になりますが。


2008-06-09 komina