Je lisais cet article et je suis curieux de savoir comment répondre à cette question.
La seule chose qui me vienne à l’esprit, c’est peut-être que dans certains pays, le séparateur décimal est une virgule et que le partage de données au format CSV peut poser problème , mais je ne suis pas vraiment sûr de ma réponse.
project-management
David Gasquez
la source
la source
Réponses:
La spécification du format CSV est définie dans la RFC 4180 . Cette spécification a été publiée parce que
Malheureusement, depuis 2005 (date de publication du RFC), rien n'a changé. Nous avons toujours une grande variété d'implémentations. L'approche générale définie dans la RFC 4180 consiste à inclure des champs contenant des caractères tels que des virgules entre guillemets. Cette recommandation n'est toutefois pas toujours respectée par un logiciel différent.
Le problème est que, dans divers environnements linguistiques européens, la virgule sert de point décimal, vous écrivez donc à la
0,005
place de0.005
. Cependant, dans d’autres cas, des virgules sont utilisées au lieu d’espaces pour signaler des groupes de chiffres, par exemple4,000,000.00
(voir ici ). Dans les deux cas, l’utilisation de virgules pourrait entraîner des erreurs lors de la lecture des données à partir de fichiers csv, car votre logiciel ne sait pas vraiment s’il0,005, 0,1
s’agit de deux nombres ou de quatre nombres différents (voir exemple ici ).Enfin et surtout, si vous stockez du texte dans votre fichier de données, les virgules sont beaucoup plus courantes dans le texte que, par exemple, les points-virgules. Par conséquent, si votre texte n'est pas placé entre guillemets, ces données peuvent également être lues facilement avec des erreurs. .
Rien ne rend les virgules meilleures, ni les séparateurs de champs pires dans la mesure où les fichiers CSV sont utilisés conformément aux recommandations de la RFC 4180 qui protègent des problèmes décrits ci-dessus. Toutefois, si le format CSV simplifié risque de ne pas contenir de champs entre guillemets, ou si la recommandation peut être utilisée de manière incohérente, les autres séparateurs (le point-virgule, par exemple) semblent plus sûrs.
la source
,
d'un séparateur plus rare gonfle les données parce que vous devez y échapper tout le temps est vrai. Et évidemment, il y a toutes ces personnes qui pensent savoir comment fonctionne le CSV, mais qui ne le savent pas vraiment.Techniquement, la virgule est aussi efficace que tout autre caractère à utiliser comme séparateur. Le nom du format indique directement que les valeurs sont séparées par des virgules (valeurs séparées par des virgules).
La description du format CSV utilise une virgule comme séparateur.
Tout champ contenant une virgule doit être double. Cela ne pose donc pas de problème pour la lecture des données. Voir le point 6 de la description :
Par exemple, les fonctions
read.csv
etwrite.csv
de R par défaut utilisent une virgule comme séparateur.la source
values
séparation par virgule. D'autres évoquentformatting
des chiffres européens , ce n'est pas un problème pour le CSVstandard
, comme vous le mentionnez correctement au point 6 ci-dessus. Les divergences par rapport à "l'utilisation correcte" existent avec tous les formats de données. Le fait est que vous connaissez vos données. D'autres mentionnenttab
ou;
délimités, mais ils peuvent avoir les mêmes problèmes que les virgules lorsque vous traitez avec des données saisies par l'utilisateur (peut-être via un formulaire et capturé par une base de données - j'ai dû me débattre avec des champs de saisie de texte libres ont gros doigts danstab
... ça craint)En plus d'être un séparateur de chiffres, il fait également partie de l'adresse (telle que l'adresse du client, etc.) dans de nombreux pays. Alors que certains pays ont des adresses courtes et bien définies, de nombreux autres ont des adresses longues, y compris parfois deux virgules dans la même ligne. Les bons fichiers CSV incluent toutes ces données entre guillemets. Mais des analyseurs syntaxiques trop simplistes et mal écrits ne permettent pas de lire et de différencier de telles personnes. (Ensuite, il y a le problème de l'utilisation de guillemets doubles dans les données, comme les citations d'un poème).
la source
Bien que la réponse de @ Tim soit correcte - j’aimerais ajouter que "csv" dans son ensemble n’a pas de standard commun - en particulier, les règles d’échappement ne sont pas définies du tout, ce qui conduit à des "formats" lisibles dans un programme, mais pas dans un autre. . Ceci est excarber par le fait que chaque "programmeur" sous le soleil pense simplement "oooh csv - je construirai mon propre analyseur!" et puis manque tous les cas de bord.
De plus, csv n'a absolument pas la capacité de stocker des métadonnées ni même le type de données d'une colonne, ce qui conduit à plusieurs documents que vous devez lire pour déchiffrer les données.
la source
Si vous pouvez supprimer le séparateur de virgule et utiliser un caractère de tabulation, votre réussite sera bien meilleure. Vous pouvez laisser le fichier .CSV et importer dans la plupart des programmes ne pose généralement pas de problème. Spécifiez simplement une tabulation délimitée plutôt qu'une virgule lorsque vous importez votre fichier. S'il y a des virgules dans vos données, vous rencontrerez un problème lorsque vous spécifiez délimité par des virgules, comme vous le savez bien.
la source
|
tant que délimiteur dans les fichiers texte d'enregistrements de type csv brassés à la maison (avec des titres de livre et d'autres métadonnées de document).|
Cela ne se produit jamais dans les données avec lesquelles je travaille, je peux donc simplement écrire des scripts Perl qui se scindent / se joignent sans avoir à rechercher des citations d'aucune sorte. Il s'agissait d'un projet ponctuel qui impliquait simplement le traitement de métadonnées enregistrées à partir d'une base de données MS Access. Pour tout projet plus important, ou si vous prévoyez de conserver les données dans ce format de fichier à long terme, choisissez quelque chose de plus robuste! Je pourrais toujours modifier quelque chose si le lot de ce mois était cassé.split
commande pour Stata, j'ai notamment consulté l'équivalent de Perl pour voir ce qu'il faisait et ce qu'il n'a pas fait. Pas le code source, juste la fonctionnalité offerte.cut
,sort
etuniq
.ASCII nous fournit quatre caractères "séparateurs", comme indiqué ci-dessous dans un extrait de la page de manuel ascii (7) * nix:
Cette réponse donne un bon aperçu de leur utilisation prévue.
Bien sûr, ces codes de contrôle manquent de la convivialité humaine (lisibilité et entrée) des délimiteurs plus populaires, mais constituent des choix acceptables pour l'échange interne et / ou éphémère de données entre programmes.
la source
Le problème n'est pas la virgule; le problème cite. Quels que soient les délimiteurs d'enregistrement et de champ que vous utilisez, vous devez être prêt à les respecter dans le contenu. Donc, vous avez besoin d'un mécanisme de citation. ET ALORS vous avez besoin d’un moyen pour que le ou les caractère (s) citant (s) apparaissent également.
Suivre la norme RFC 4180 simplifie les choses pour tout le monde.
J'ai personnellement dû écrire un script pour probablement corriger la sortie d'un programme qui a mal tourné, alors je suis un peu militant à ce sujet. "probablement réparer" signifie que cela a fonctionné pour mes données, mais je peux voir des situations où cela échouerait. (Dans la défense de ce programme, il a été écrit avant la norme.)
la source