542 votes

Existe-t-il un moyen d'inclure des virgules dans des colonnes CSV sans casser le formatage ?

J'ai un CSV à deux colonnes avec un nom et un numéro. Certains noms de personnes utilisent des virgules, par exemple Joe Blow, CFA. Cette virgule rompt le format CSV, puisqu'elle est interprétée comme une nouvelle colonne.

Je me suis renseigné et la prescription la plus courante semble être de remplacer ce caractère, ou de remplacer le délimiteur, par une nouvelle valeur (par ex. this|that|the, other ).

J'aimerais vraiment conserver le séparateur à virgule (je sais qu'Excel prend en charge d'autres délimiteurs, mais d'autres interprètes peuvent ne pas le faire). J'aimerais également conserver la virgule dans le nom, comme suit Joe Blow| CFA a l'air assez ridicule.

Existe-t-il un moyen d'inclure des virgules dans des colonnes CSV sans rompre le formatage, par exemple en les échappant ?

697voto

Ryan Points 10831

Pour encoder un champ contenant des virgules ( , ) ou entre guillemets ( " ), placez le champ entre guillemets :

field1,"field, 2",field3, ...

Les caractères doubles guillemets littéraux sont généralement représentés par un caractère paire de guillemets doubles ( "" ). Par exemple, un champ contenant exclusivement un caractère entre guillemets est codé comme suit """" .

Par exemple :

Sheet: |Hello, World!|You "matter" to us.|

  CSV: "Hello, World!","You ""matter"" to us."

Autres exemples (feuille → csv) :

  • regular_valueregular_value
  • Fresh, brown "eggs""Fresh, brown ""eggs"""
  • """""
  • ","""","""
  • ,,,"",,,"""
  • ,"",","""","
  • """""""""""

Voir wikipedia .

56voto

mudin Points 1283

J'ai constaté que certaines applications comme Numbers sous Mac ignorent le guillemet double s'il est précédé d'un espace.

a, "b,c" ne fonctionne pas alors que a,"b,c" œuvre.

40voto

Rudu Points 8641

Le problème avec le format CSV, c'est qu'il n'y a pas une spécification, mais plusieurs méthodes acceptées, sans qu'il soit possible de distinguer laquelle doit être utilisée (pour générer/interpréter). J'ai discuté de toutes les méthodes pour échapper aux caractères (les nouvelles lignes dans ce cas, mais le principe de base est le même) dans un autre message . En fait, il s'agit d'utiliser un processus de génération/escaping CSV pour les utilisateurs prévus, en espérant que les autres n'y voient pas d'inconvénient.

Document de référence .

21voto

Cloud Points 485

Si vous voulez faire comprendre que vous avez dit quelque chose, vous pouvez utiliser des guillemets. Quelque chose comme ceci

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

Vous pouvez donc maintenant utiliser des virgules dans votre variable name.

15voto

SLaks Points 391154

Vous devez citer ces valeurs.
Ici est une spécification plus détaillée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X