Voir le flux RSS

tondeurh

CSV DSV TSV SYLK, la jungle des formats d'exports!

Noter ce billet
par , 27/05/2016 à 23h30 (369 Affichages)
Interrogation des étudiants en licence SIO: Le format CSV comment le mettre en forme?

On est ici dans la jungle des formats d'export dit de fichiers à plats...

nb : une information sur les caractères ASCII ici => http://cyberzoide.developpez.com/info/turbo/chap13.php3 celà peut servir.

Quand peut on parler de format CSV (Comma Separated Values)
Ce format qui est très utilisé dans les échanges de données, se base sur le RFC (Request for comments) 4180 [https://tools.ietf.org/rfc/rfc4180.txt] qui n'est "qu'informatif" et non "normatif", toute la problématique vient de là.

Que nous dit ce RFC, simplement que le format CSV doit être construit de la manière suivante :
  • Chaque éléments d'un enregistrement doivent être séparés par une virgule , ASCII 44 en valeur décimale ou 0x2C en valeur hexadécimale.
  • Chaque enregistrements d'éléments doivent être séparés par un CRLF (Carriage Return / Line feed) ASCII décimal 13/10 Héxa 0x0D/0x0A
  • Chaque enregistrements d'éléments doivent comporter le même nombre de colonnes.
  • La dernière ligne peut avoir un retour chariot, ou éventuellement ne pas en avoir.
  • Chaque élément peut être encadré par des "doubles quotes" ASCII (Décimal 34 ou Hexa. 0x22), ceci n'est pas obligatoire.
  • Si le contenu d'un élément comporte un caractère "double quotes", le caractère "double quotes" doit être doublé.
  • Si le contenu d'un élément doit comporter une information multi-lignes séparé par les caractères CRLF, alors cet élément doit se trouver entre "doubles quotes".
  • Un espace est considéré comme un élément, l'absence de caractère également.
  • Les enregistrements peuvent posséder un entête (optionnel), qui doit comporter autant de nom de colonnes que le nombre d'éléments dans les enregistrements.
  • Que l'on peut mettre le mot clé "Header" en entête (première ligne) pour indiquer que le fichier possède une entête!


Exemple de fichier CSV dans les règles de l'art (nb: je matérialise les retours chariots par CRLF)

Header
"NOM","PRENOM","DDN","SEXE" CRLF
"Cover","Harry","12/01/1998","M" CRLF
"In Black","Men",,"M" CRLF
"Aude "O2"","DIT","23/05/2015","F" CRLF
"Test Nom CRLF
sur plusieurs CRLR
lignes","Prenom",,"M" CRLF


Et si on n'utilise pas le format CSV de manière respectueuse ?

Alors vous utilisez le format DSV (Delimited Separated Values)!

Ce format permet en étant plus permissif, d'utiliser à la place de la ',' le caractère ';' caractère ASCII 0x3B Hexa ou 59 décimal.
Hormis les règles équivalentes ci dessus, on trouvera des variantes qui permettrons d’utiliser à la place de la , (virgule) le ; (point virgule), le dièse # ou le caractère "pipe" |, on trouve également le (deux points) :, &, ^,%,$, etc...

Exemple de format DSV :
Header
"NOM","PRENOM","DDN","SEXE" CRLF
"Cover","Harry","12/01/1998","M" CRLF
"In Black","Men",,"M" CRLF
"Aude "O2"","DIT","23/05/2015","F" CRLF
"Test Nom CRLF
sur plusieurs CRLR
lignes","Prenom",,"M" CRLF



Justement parlons en de ce caractère pipe (|) dans les fichiers à plat qui respectent la norme HL7 (Health Level 7) si on peut parler de norme ici.

Dans le format HL7, on utilise allégrement les caractères |^~& qui se font appelés séparateurs de champs.

Exemple de format de fichier HL7 ADT A01 (Admission):

Citation Envoyé par Exemple de fichier au format HL7
MSH|^~\&|EPIC|EPICADT|SMS|SMSADT|199912271408|CHARRIS|ADT^A04|1817457|D|2.5|
PID||0493575^^^2^ID 1|454721||DOE^JOHN^^^^|DOE^JOHN^^^^|19480203|M||B|254 MYSTREET AVE^^MYTOWN^OH^44123^USA||(216)123-4567|||M|NON|400003403~1129086|
NK1||ROE^MARIE^^^^|SPO||(216)123-4567||EC|||||||||||||||||||||||||||
PV1||O|168 ~219~C~PMA^^^^^^^^^||||277^ALLEN MYLASTNAME^BONNIE^^^^|||||||||| ||2688684|||||||||||||||||||||||||199912271408||||||002376853
Mais du format hl7 normatif (warff!!) on en reparlera!!!

Citation Envoyé par Note
Très intéressant dans l’interopérabilité hospitalière, il n'est pas très respecté, mais ceci est une autre histoire!
Et TSV (Tab Searated Values), et bien idem au format CSV, mais à la place d'utiliser des ',' on utilise des caractères tabulations, soit le caractère ASCII 9 en décimal ou 0x09 en Hexadécimal, rien de neuf sous le soleil, sauf qu'ici on va utiliser un caractère non imprimable comme dirait l'autre!.

Reste a parler du format SYLK (SYmbolic LinK) (Microsoft oblige!)
celui ci n'étant pas un format ouvert, on ne sait que très peu de chose sur lui.

Il y a bien des liens qui en parlent comme :

https://fr.wikipedia.org/wiki/Symbolic_Link
https://en.wikipedia.org/wiki/SYmbolic_LinK_%28SYLK%29
http://netghost.narod.ru/gff/graphic...ry/micsylk.htm

Tous ce que je peut en dire, c'est que Microsoft préfère ce format d'export qui prend en charge également l’intégration des formules mathématiques d'Excel en import/export, ce que ne permet pas le format CSV.

Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Viadeo Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Twitter Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Google Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Facebook Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Digg Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Delicious Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog MySpace Envoyer le billet « CSV DSV TSV SYLK, la jungle des formats d'exports! » dans le blog Yahoo

Mis à jour 19/06/2016 à 16h21 par Obsidian (Correction des balises.)

Catégories
Programmation

Commentaires