CSV について

株式会社リュディアです。今回は CSV についてまとめてみます。あまり意識せず使っていましたが、先日、トラブルに会いまして調査し直しましたところ、いろいろと新規に知ることがありましたので忘備録としてまとめておきます。

参考にしたのは以下のページです。CSV を定義というか勧告としてまとめている RFC 4180 の原文です。以下にリンクをつけておきます。参考に RFC は Request for Comments の略語です。

まず CSV を扱ったことのある方はどの程度おられるでしょうか? Comma-Separated Values の略語です。スプレッドシートのデータや画像データをアプリケーションに非依存で保存する際に CSV を使うことが多いです。またアプリケーション間でデータの移行を行う際にも CSV を使うことが多いですね。

ここで CSV の形式を一言で記載しますとカンマ区切りで表現されたテキストファイルです。例えばエクセルの xlsx ファイルであれば保存形式の詳細はわかりませんが、CSV ファイルでは名簿は以下のように表現されます。

姓, 名, 住所, 電話番号
山田, 花子, 大阪市, 06-1234-5678
田中, 一郎, 神戸市, 078-123-4567

このように CSV はテキスト形式であり、かつ区切りをカンマで区切るものとなっています。

この CSV と似たものに TSV (Tab-Separated-Values)SSV (Space-Separated-Values)があります。名前の通り区切り文字をタブにしたもの、スペースにしたものです。ややこしいのはCSV ファイルと言ってもソフトウェアによっては TSV や SSV を使っている場合があることです。私は aaa.csv というファイルを知り合いから受け取りプログラムで読み込むときにカンマ区切りと思い込んでいて痛い目にあいました。

そこで今回は RFC-4180 を改めて読んでみることにしました。短いものですのでまとめは不要かもしれませんが自分自身の忘備録です。

1. Each record is located on a separate line, delimited by a line break (CRLF).
For example:
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF
各レコードは分離された行になっています。行は改行 (CRLF) で区切られています。

2. The last record in the file may or may not have an ending line break.
For example:
aaa,bbb,ccc CRLF
zzz,yyy,xxx
ファイルの最終レコード(行)には最後の改行(CRLF)があっても無くてもよい。

3.There maybe an optional header line appearing as the first line of the file with the same format as normal record lines. This header will contain names corresponding to the fields in the file and should contain the same number of fields as the records in the rest of the file (the presence or absence of the header line should be indicated via the optional "header" parameter of this MIME type).
For example:
field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF
ファイルの最初の行として他の行と同じフォーマットを持つオプショナルなヘッダ行があってもよい。このヘッダはフィールドに合致した名前を持ちフィールド数は残りのファイルにあるレコード部と同じ個数を持つべきです。(カッコ内は省略)

4.Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma.
For example:
aaa,bbb,ccc
ヘッダと各レコード(行)において、カンマで区切られた1つ以上のフィールドを含みます。ファイル内で各々の行は同じ数のフィールドを持つべきです。スペースはフィールドの1つとして解釈されるべきであり、無視されるべきではありません。レコードの最終フィールドにはコンマを入れてはいけません。

5.Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields.
For example:
"aaa","bbb","ccc" CRLF
zzz,yyy,xxx
各フィールドはダブルクォートで囲まれていても囲まれていなくてもよい(しかしながらいくつかのプログラム、例えば Microsoft Excel はダブルクォートを全く使っていません)。もしフィールドがダブルクォートで囲まれていないのであれば、ダブルクォートはフィールド内に現れてはいけません。

6.Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes.
For example:
"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx
改行 (CRLF)、ダブルクォート、カンマを含むフィールドはダブルクォートで囲まれるべきです。

7.If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote.
For example:
"aaa","b""bb","ccc"
もしフィールドがダブルクォートで囲まれている場合、フィールドの値としてダブルクォートが現れた場合には、その直前にダブルクォートを追加しエスケープする必要があります。

この後に言葉の定義などが続きますが、RFC としてはここまでです。定義はされていますが、RFC としてまとめられてる前に派生版が世の中に出回ってしまった、という感じですね。

CSV を扱う際には事前にファイルを眺めてどのようなフォーマットになっているのか確認することをお勧めいたします。

では、ごきげんよう。



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