2. Definizione del formato CSV (Definition of the CSV Format)
Sebbene esistano varie specifiche e implementazioni per il formato CSV (ad es. [4], [5], [6] e [7]), non esiste una specifica formale, il che consente un'ampia varietà di interpretazioni dei file CSV. Questa sezione documenta il formato che sembra essere seguito dalla maggior parte delle implementazioni:
-
Ogni record (Record) si trova su una riga separata, delimitata da un'interruzione di riga (CRLF). Ad esempio:
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
L'ultimo record nel file può (may) avere o meno un'interruzione di riga finale. Ad esempio:
aaa,bbb,ccc CRLF
zzz,yyy,xxx -
Può (may) esserci una riga di intestazione opzionale (Header Line) che appare come prima riga del file con lo stesso formato delle righe di record normali. Questa intestazione conterrà nomi corrispondenti ai campi nel file e dovrebbe (should) contenere lo stesso numero di campi dei record nel resto del file (la presenza o l'assenza della riga di intestazione dovrebbe essere indicata tramite il parametro opzionale "header" di questo tipo MIME). Ad esempio:
field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
All'interno dell'intestazione e di ogni record, possono (may) esserci uno o più campi (Field), separati da virgole. Ogni riga dovrebbe (should) contenere lo stesso numero di campi in tutto il file. Gli spazi sono considerati parte di un campo e non dovrebbero (should not) essere ignorati. L'ultimo campo nel record non deve (must not) essere seguito da una virgola. Ad esempio:
aaa,bbb,ccc -
Ogni campo può (may) essere racchiuso o meno tra virgolette doppie (tuttavia alcuni programmi, come Microsoft Excel, non utilizzano affatto le virgolette doppie). Se i campi non sono racchiusi tra virgolette doppie, allora le virgolette doppie non possono (may not) apparire all'interno dei campi. Ad esempio:
"aaa","bbb","ccc" CRLF
zzz,yyy,xxx -
I campi contenenti interruzioni di riga (CRLF), virgolette doppie e virgole dovrebbero (should) essere racchiusi tra virgolette doppie. Ad esempio:
"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx -
Se vengono utilizzate le virgolette doppie per racchiudere i campi, allora una virgoletta doppia che appare all'interno di un campo deve (must) essere sottoposta a escape precedendola con un'altra virgoletta doppia. Ad esempio:
"aaa","b""bb","ccc"
La grammatica ABNF (ABNF Grammar) [2] appare come segue:
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