J'ai un CSV à deux colonnes avec un nom et un numéro. Le nom de certaines personnes utilise des virgules, par exemple. Joe Blow, CFA.
Cette virgule casse le format CSV, car elle est interprétée comme une nouvelle colonne.
J'ai lu et la prescription la plus courante semble remplacer ce caractère, ou remplacer le délimiteur, par une nouvelle valeur (par exemple this|that|the, other
).
J'aimerais vraiment garder le séparateur de virgules (je sais qu'Excel prend en charge d'autres délimiteurs, mais pas d'autres interprètes). Je voudrais également garder la virgule dans le nom, car cela Joe Blow| CFA
semble assez idiot.
Existe-t-il un moyen d'inclure des virgules dans les colonnes CSV sans casser la mise en forme, par exemple en les échappant?
Réponses:
Mettez le champ entre guillemets, par exemple
Voir wikipedia .
Mise à jour :
Pour coder un devis, utilisez
"
, un symbole de double guillemet dans un champ sera codé comme""
, et le champ entier deviendra""""
. Donc, si vous voyez ce qui suit dans par exemple Excel:le fichier CSV contiendra:
Une virgule est simplement encapsulée à l'aide de guillemets,
,
devient ainsi","
.Une virgule et une citation doivent être encapsulées et citées,
","
devient ainsi""","""
.la source
","
) et les guillemets sont échappés (par exemple"""
)Le problème avec le format CSV, c'est qu'il n'y a pas une spécification, il existe plusieurs méthodes acceptées, sans aucun moyen de distinguer celles qui doivent être utilisées (pour générer / interpréter). J'ai discuté de toutes les méthodes pour échapper aux caractères (nouvelles lignes dans ce cas, mais même principe de base) dans un autre post . Fondamentalement, cela revient à utiliser un processus de génération / d'échappement CSV pour les utilisateurs prévus, et en espérant que le reste ne dérange pas.
Document de spécification de référence .
la source
Si vous voulez faire ce que vous avez dit, vous pouvez utiliser des guillemets. Quelque chose comme ça
maintenant, vous pouvez utiliser une virgule dans votre variable de nom.
la source
$whatever = "\"".$name."\"";
Vous devez citer ces valeurs.
Voici une spécification plus détaillée.
la source
En plus des points dans d'autres réponses: une chose à noter si vous utilisez des guillemets dans Excel est le placement de vos espaces. Si vous avez une ligne de code comme celle-ci:
Excel traitera la citation initiale comme une citation littérale au lieu de l'utiliser pour échapper des virgules. Votre code devra être remplacé par
C'est cette subtilité qui m'a amené ici.
la source
J'ai fait face au même problème et citer le
,
n'a pas aidé. Finalement, j'ai remplacé le,
avec+
, terminé le traitement, enregistré la sortie dans un fichier externe et remplacé le+
avec,
. Cela peut sembler laid mais cela a fonctionné pour moi.la source
+
n'existe pas du tout dans mes données. Merci pour votre aimable commentaire.""
. C'est la façon normale de procéder.field = field.replace('"', '""')
Étape 2 - après l'étape 1, entourez le champ lui-même entre guillemets doubles par exemplefield = '"' + field + '"'
- alors vous êtes moulé je pense.Selon votre langue, une méthode to_json peut être disponible. Cela échappera à beaucoup de choses qui brisent les CSV.
la source
J'ai trouvé que certaines applications comme Numbers dans Mac ignorent la double citation s'il y a de l'espace devant elle.
a, "b,c"
ne fonctionne pas pendant lea,"b,c"
travail.la source
Vous pouvez encoder vos valeurs, par exemple en PHP base64_encode ($ str) / base64_decode ($ str)
OMI, c'est plus simple que de doubler les devis, etc.
https://www.php.net/manual/en/function.base64-encode.php
Les valeurs codées ne contiendront jamais de virgule, donc chaque virgule dans votre CSV sera un séparateur.
la source
Vous pouvez utiliser des littéraux de modèle (chaînes de modèle)
par exemple -
la source
Vous pouvez utiliser le
Text_Qualifier
champ de votre gestionnaire de connexions de fichiers plats pour as"
. Cela devrait encapsuler vos données entre guillemets et les séparer uniquement par des virgules en dehors des guillemets.la source
Premièrement, si la valeur de l'élément a un caractère de guillemet double ("), remplacez-le par 2 caractères de guillemet double (" ")
Enfin, encapsulez la valeur de l'article:
À GAUCHE: avec double guillemet (")
À DROITE: avec des guillemets (") et des virgules (,)
la source
Les guillemets doubles n'ont pas fonctionné pour moi, cela a fonctionné pour moi
\"
. Si vous souhaitez placer des guillemets doubles comme exemple, vous pouvez définir\"\"
.Vous pouvez créer des formules, par exemple:
écrira en csv:
la source
Ce n'est peut-être pas ce dont nous avons besoin ici, mais c'est une très vieille question et la réponse peut aider les autres. Un conseil que je trouve utile lors de l'importation dans Excel avec un séparateur différent consiste à ouvrir le fichier dans un éditeur de texte et à ajouter une première ligne comme:
sep = |
où | est le séparateur que vous souhaitez qu'Excel utilise. Alternativement, vous pouvez changer le séparateur par défaut dans Windows mais un peu long:
Panneau de configuration> Horloge et région> Région> Formats> Supplémentaire> Numéros> Séparateur de liste [passer de la virgule à votre alternative préférée]. Cela signifie qu'Excel exportera également par défaut les fichiers CSV à l'aide du séparateur choisi.
la source