Island Life

< 病院の一日 | らむ太とteapot >

2008/08/12

rfc4180の曖昧性

CSV形式はRFC:4180でフォーマルに定められているのだが…

  • recordはCRLFで終わる、ただし最後のレコードの後ろのCRLFは省略可
  • recordはひとつ以上のfieldをCOMMAで区切ったもの

これって、ファイル末尾がCRLFで終わっている場合、

  1. それがrecord終端のCRLFなのか、
  2. その後ろにひとつの空のfieldを持つrecordがあって、その後ろのCRLFが省略されているのか、

わからないよなあ。

一応「各レコードのフィールド数は同じでなければならない」って規定があるから それまでに2つ以上のフィールドが出てきてれば(2)の可能性は排除できるけど。

まあ慣例的にはCRLFの後ろにEOFが来てればCRLFが終端だとするだろうけれど、 それを形式的に(EBNFとかPEGで)かつ簡潔に記述するのって結構面倒なような。

と、PEGのテスト用のCSVパーザをいじってて思った。

Tag: Programming