システム間でデータ受け渡しをするCSVファイルの最低限な定義。

CSV(Comma-Separated Values)形式の最低限の定義

ファイルの中身がカンマで区切って「値,値,値」の形なっているテキストファイルは、だいたい「CSVファイル」って言われる。

EW-SYS.INFO

 コンピュータシステムにおいて、CSV形式のファイルでデータの受け渡しをすることは、もはや標準装備の仕様と言っても過言ではないんじゃないかな。

 「CSV」は「Comma-Separated Values」の頭文字の略語で、「カンマで区切られた値群」ということである。

問題になってくるのは、書き方。

 「カンマ」で区切られていれば、ほぼCSV形式なのですが、値の方は、どう表記する?

 例えば、1,000円とか1,000個などのように、人の見易さのために、3桁ごとの桁区切りのカンマがある値を、CSV形式で使いたい時は?
 これを、そのまま書いたら・・・
 「輪ゴム,1,000個,1,000円」という形になります。
 これだと・・・

ABCDE
輪ゴム1000個1000円
輪ゴム,1,000個,1,000円のCSV

 おおっと!
 これでは意図したデータの意味をなさなくなってしまいました。

 できれば、次のようになって欲しいはず。

ABC
輪ゴム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形式のテキストファイルができあがる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください