From 4d5bf6d123bf706af5abdba69fed635ae2d896c0 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Wed, 19 Aug 2015 20:00:42 -0400 Subject: [PATCH] csv-rfc.txt --- c/csv-rfc.txt | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 c/csv-rfc.txt diff --git a/c/csv-rfc.txt b/c/csv-rfc.txt new file mode 100644 index 000000000..7dd4a2c28 --- /dev/null +++ b/c/csv-rfc.txt @@ -0,0 +1,89 @@ +Definition of the CSV Format + +While there are various specifications and implementations for the +CSV format (for ex. [4], [5], [6] and [7]), there is no formal +specification in existence, which allows for a wide variety of +interpretations of CSV files. This section documents the format that +seems to be followed by most implementations: + +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 + +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 + +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 + +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 + +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 + +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" + +The ABNF grammar [2] appears as follows: + + file = [header CRLF] record *(CRLF record) [CRLF] + + header = name *(COMMA name) + + record = field *(COMMA field) + + name = field + + field = (escaped / non-escaped) + + escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE + + non-escaped = *TEXTDATA + + COMMA = %x2C + + CR = %x0D ;as per section 6.1 of RFC 2234 [2] + + DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] + + LF = %x0A ;as per section 6.1 of RFC 2234 [2] + + CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] + + TEXTDATA = %x20-21 / %x23-2B / %x2D-7E +