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 ?

2voto

Mohammed Points 546

J'ai rencontré le même problème et j'ai cité le , n'a pas aidé. Finalement, j'ai remplacé le , con + a terminé le traitement, a enregistré la sortie dans un fichier de sortie et a remplacé le fichier de sortie par le fichier de sortie. + con , . Cela peut sembler laid, mais cela a fonctionné pour moi.

2voto

user25307 Points 21

Ce n'est peut-être pas ce dont on a besoin ici, mais il s'agit d'une question très ancienne et la réponse peut aider d'autres personnes. Une astuce que je trouve utile pour l'importation dans Excel avec un séparateur différent est d'ouvrir le fichier dans un éditeur de texte et d'ajouter une première ligne comme :

sep=|

où | est le séparateur que vous souhaitez qu'Excel utilise. Vous pouvez également modifier le séparateur par défaut dans Windows, mais c'est un peu fastidieux :

Panneau de configuration>Horloge et région>Région>Formats>Additionnel>Numéros>Séparateur de liste [remplacez la virgule par votre alternative préférée]. Cela signifie qu'Excel exportera également par défaut les CSV en utilisant le séparateur choisi.

1voto

Kevin Points 61

Vous pouvez encoder vos valeurs, par exemple en PHP base64_encode($str) / base64_decode($str)

IMO : c'est plus simple que de doubler les citations, etc.

https://www.php.net/manual/en/function.base64-encode.php

Les valeurs encodées ne contiendront jamais de virgule, de sorte que chaque virgule dans votre CSV sera un séparateur.

0voto

sakshi jain Points 171

Vous pouvez utiliser le Text_Qualifier dans le gestionnaire de connexion de votre fichier Flat en tant que " . Cela devrait permettre d'envelopper vos données dans citations et ne les séparer que par des virgules situées à l'extérieur des guillemets.

0voto

LifeiSHot Points 141

Tout d'abord, si la valeur de l'élément comporte des guillemets doubles ("), remplacez-les par deux guillemets doubles ("").

item = item.ToString().Replace("""", """""")

Enfin, la valeur de l'article est enveloppée :

A GAUCHE : Avec le caractère de guillemet double (")

A DROITE : Avec le caractère guillemet double (") et le caractère virgule (,)

csv += """" & item.ToString() & ""","

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