おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

CSVファイルとRFC4180について調べてみた。

はじめに

CSVファイルを扱う仕事は結構な頻度でありますが、詳しく調べてみるとどうやらRFC4180という国際標準なCSV書式があることを知ったので引用を中心にまとめてみました。

RFC4180について

以下の記事がとても分かりやすかったので引用していきます。

www.kasai.fm

  • レコードの区切りは改行(CRLF)であること
    ※ファイル最終行については改行アリでもナシでもOK!

  • ヘッダとレコードはコンマで区切られた一つ以上のフィールドを含み、各レコードはそれぞれ同じフィールドを持つこと

  • スペースはフィールドの一部とする

  • レコードの最後はコンマで終わってはならない

  • フィールドがダブルクォーテーションで囲まれていない場合、そのフィールドの値には、ダブルクォーテーションが含まれてはいけない

  • 改行(CRLF)、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき

  • フィールドがダブルクォーテーションで囲まれている場合、フィールドの値に含まれるダブルクォーテーションは、その直前にひとつダブルクォーテーションを付加して、エスケープしなければならない

データ移行などの際にお客さんと決めておきたいこと

上記のような国際標準な書式があるとはいえ、全てのシステムがその書式に従っているというわけではありません。 そのため、データ移行の際はお客さんとCSVの書式について細かく話し合っておく必要があります。

以下の記事のまとめがとても良かったです。

codezine.jp

  1. 文字コード
  2. 改行コード
  3. ヘッダ行の有無
  4. 区切り文字
  5. ダブルクォートで囲むか否か
  6. ダブルクォートで囲まない場合の値内の制御文字(ダブルクォート、カンマ、タブ、改行)の処理

ダブルクォートで囲まない場合の制御文字について、例えば対象データにカンマが入っていたら「全角カンマ」に変更してもらう or 削除してもらう等々する、という感じですね。
あとは時々フッター行{や最終行は空行にする等の作りにしているシステムもあるのでその辺も実装に関係しそうなところは聞いておくのもアリかもしれません。

おわりに

CSVについても今までは何となくライブラリを用いてよしなにやっていたのですが、本格的に考えた場合はお客様とすり合わせが必要な内容がたくさんありますね...。
今後はこれらの内容をふまえてしっかり仕事をこなしていこうと思います!!