2. Définition du format CSV (Definition of the CSV Format)
Bien qu'il existe diverses spécifications et implémentations pour le format CSV (par ex. [4], [5], [6] et [7]), il n'existe aucune spécification formelle, ce qui permet une grande variété d'interprétations des fichiers CSV. Cette section documente le format qui semble être suivi par la plupart des implémentations :
-
Chaque enregistrement (Record) est situé sur une ligne séparée, délimitée par un saut de ligne (CRLF). Par exemple :
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
Le dernier enregistrement du fichier peut avoir ou non un saut de ligne final. Par exemple :
aaa,bbb,ccc CRLF
zzz,yyy,xxx -
Il peut y avoir une ligne d'en-tête optionnelle (Header Line) apparaissant comme première ligne du fichier avec le même format que les lignes d'enregistrement normales. Cet en-tête contiendra des noms correspondant aux champs du fichier et devrait (should) contenir le même nombre de champs que les enregistrements dans le reste du fichier (la présence ou l'absence de la ligne d'en-tête devrait être indiquée via le paramètre optionnel "header" de ce type MIME). Par exemple :
field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
Dans l'en-tête et chaque enregistrement, il peut y avoir un ou plusieurs champs (Field), séparés par des virgules. Chaque ligne devrait (should) contenir le même nombre de champs dans tout le fichier. Les espaces sont considérés comme faisant partie d'un champ et ne devraient pas (should not) être ignorés. Le dernier champ de l'enregistrement ne doit pas (must not) être suivi d'une virgule. Par exemple :
aaa,bbb,ccc -
Chaque champ peut (may) être entouré ou non de guillemets doubles (cependant, certains programmes, tels que Microsoft Excel, n'utilisent pas du tout de guillemets doubles). Si les champs ne sont pas entourés de guillemets doubles, alors les guillemets doubles ne peuvent pas (may not) apparaître à l'intérieur des champs. Par exemple :
"aaa","bbb","ccc" CRLF
zzz,yyy,xxx -
Les champs contenant des sauts de ligne (CRLF), des guillemets doubles et des virgules devraient (should) être entourés de guillemets doubles. Par exemple :
"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx -
Si des guillemets doubles sont utilisés pour entourer des champs, alors un guillemet double apparaissant à l'intérieur d'un champ doit (must) être échappé en le précédant d'un autre guillemet double. Par exemple :
"aaa","b""bb","ccc"
La grammaire ABNF (ABNF Grammar) [2] apparaît comme suit :
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