mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-22 07:30:43 +00:00
91 lines
2.9 KiB
Text
91 lines
2.9 KiB
Text
================================================================
|
|
Offlineable (subway-tunnelable) excerpt from https://tools.ietf.org/html/rfc4180
|
|
================================================================
|
|
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
|