コンピュータシステムにおいて、CSV形式のファイルでデータの受け渡しをすることは、もはや標準装備の仕様と言っても過言ではないんじゃないかな。
「CSV」は「Comma-Separated Values」の頭文字の略語で、「カンマで区切られた値群」ということである。
問題になってくるのは、書き方。
「カンマ」で区切られていれば、ほぼCSV形式なのですが、値の方は、どう表記する?
例えば、1,000円とか1,000個などのように、人の見易さのために、3桁ごとの桁区切りのカンマがある値を、CSV形式で使いたい時は?
これを、そのまま書いたら・・・
「輪ゴム,1,000個,1,000円」という形になります。
これだと・・・
A | B | C | D | E |
輪ゴム | 1 | 000個 | 1 | 000円 |
おおっと!
これでは意図したデータの意味をなさなくなってしまいました。
できれば、次のようになって欲しいはず。
A | B | C |
輪ゴム | 1,000個 | 1,000円 |
問題は、値の中に「カンマ」が入る場合です。CSV形式は、値をカンマで区切って表記しますので、値にカンマがあるのは、基本的にNG。
そこで逃げ道として、テキストタブ区切りという「カンマ」ではなく「TAB」コードで値を区切るファイル形式にしてしまう方法もあります。これも有効なアタマのイイひとつの手だと思うのですが、やっぱり、ここはCSV形式での解決を目指したい。
なので、値を「ダブルクォーテーション」で囲ってしまうのです。
”値”という感じにすると、「ダブルクォーテーション」内は一括りと解釈され、例題では「輪ゴム,”1,000個”,”1,000円”」とするのが正解になります。
値の中に「ダブルクォーテーション」がある時は?
あーもう!
システム開発の道は、次から次へと問題が出てきて、それを解決する・・・線路は続くよどこまでも。野を越え、山越え・・・その辺りで終わって欲しい。
値に「輪ゴム”10cm”」とか書きたくなったら、「輪ゴム(10cm)」じゃダメなんですかねっ!?「ダブルクォーテーション」じゃなくていいよねっ!?と、「この人、応用とか臨機応変とかないのかよっ!」と叫んじゃったり・・・。まあ最近は、会社名や店名に、奇をてらいすぎて「なんて読むの?」みたいな表記が増えましたよね。そもそも読めない店名に意味あるのかな・・・?
という訳で、どうしても「ダブルクォーテーション」を値に使わなければならない時は、「ダブルクォーテーション」を重ねると良いので、「”輪ゴム””10cm”””,”1,000個”,”1,000円”」とすれば良いのです。
わたし的CSV形式ルール
どっかの誰かがCSV形式のルールを定義しているけど、あいまいに普及している感じだから、わたし的には、こういうルールで利用しているってだけですが。
- 値と値の間を、カンマで区切る。
- 行の終わりに、改行コードを入れる。
- 値の個数は、行ごとに変えない。
- 同じ列の値の型は同じにする。たとえば1行目:文字列,数値,数値、2行目:文字列,文字列,数値というようにしない。
- 文字列は「ダブルクォーテーション」で括る。
- 値の文字列中に「ダブルクォーテーション」がある場合は「ダブルクォーテーション」を重ねる(ひとつ付与する)。
- 数値に付与された3桁ごとの桁区切りのカンマは省く。
- 値が文字列か数値か不明な場合は文字列として扱う。
- 日付、時刻の表記は「YYYY/MM/DD HH:MM:SS」の形式を基本とする。日付のみの場合は「YYYY/MM/DD」もアリ。
- 出力、または入力するCSV形式のテキストファイルは、基本的に文字コードは「Shift-JIS」を使う。しかし、システムの仕様により「UTF-8」もアリ。
完全なローカルルールでっせ!
それでも、このルールでMicrosoft Excelなどの表計算ソフトで、ほぼほぼ問題なく読み込めるCSV形式のテキストファイルができあがる。