Quelles sont les métadonnées «sep =» que vous pouvez ajouter aux fichiers CSV?


24

En essayant de savoir comment faire pour ouvrir correctement les CSV dans Excel sur un PC espagnol (appartenant à un client), j'ai trouvé de nombreuses réponses recommandant d'utiliser sep=,en haut du fichier:

Sur la face de celui - ci, cette approche fonctionne , mais aucune de ces réponses donnent de plus amples informations sur cette option de métadonnées vient. J'ai essayé de chercher ce que cela signifie (et j'ai donc trouvé toutes ces réponses) mais je n'ai pas pu obtenir d'autres informations, d'autant plus que la ponctuation est notoirement difficile à rechercher.

Ma principale préoccupation est de savoir s'il s'agit ou non d'une fonctionnalité spécifique à Excel . Je le soupçonne, mais je n'ai rien trouvé de définitif pour le confirmer.

Certaines questions connexes sont:

  • Quels caractères peuvent être utilisés dans ce paramètre?
  • Quels autres paramètres sont disponibles (par exemple, caractère de terminaison de ligne, caractère de guillemet, etc.).
  • Existe-t-il d'autres outils qui prennent officiellement en charge cette fonctionnalité?

J'espère qu'il y a quelque part une documentation sur laquelle quelqu'un peut me diriger et qui répondra à toutes ces questions et plus encore; Je n'ai tout simplement pas pu le trouver.

Quelques précisions:

Ce sep=n'est pas un paramètre pour un analyseur. Il est destiné à être placé à l' intérieur du CSV. Exemple:

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"

4
Oui, c'est spécifique à Excel .
Raystafarian

2
Avez-vous pu obtenir quelque chose à ce sujet? Je suis perplexe avec la même question et je n'ai pas encore trouvé de spécifications MS décrivant cette fonctionnalité. Si cette fonctionnalité n'est pas documentée par MS, comment diable est-elle sortie en premier lieu?
toddlermenot

@toddlermenot Malheureusement non. Tout ce que je reçois, ce sont des gens qui affirment qu'il est spécifique à Excel sans rien pour appuyer cette affirmation, ce qui est décevant.
Burhan Ali

Réponses:


7

La RFC 4180 est généralement reconnue comme la norme pour le format CSV et ne mentionne aucune de ces fonctionnalités.

Le modèle W3C pour les données tabulaires et les métadonnées sur le Web le mentionne comme une fonctionnalité hors de leur portée:

De nombreux fichiers "CSV" incorporent des métadonnées, par exemple dans des lignes avant la ligne d'en-tête du document CSV. Cette spécification ne définit aucun format pour incorporer des métadonnées dans les fichiers CSV, à part les noms des colonnes dans la ligne d'en-tête.

Donc, même si je n'ai trouvé aucune preuve directe que cette fonctionnalité est spécifique à Excel, c'est apparemment toujours le cas car il ne semble y avoir aucun document de normalisation couvrant cette fonctionnalité.


Bon approvisionnement. Une chose que je dois dire est que sep = | définit le séparateur à utiliser dans Excel comme le caractère de canal ('|'). Il n'est pas largement utilisé mais n'est pas exclusif à Excel. Il s'agit d'une directive de séparation. Les versions internationales d'Excel iirc ont des caractères différents, par exemple, la langue européenne sur une machine exécutant Excel utilise des points-virgules.
var firstName

1
Je connais l'utilisation (peut-être que ce n'était pas tout à fait clair dans ma réponse). Je viens de souligner qu'il semble qu'Excel a introduit cette fonctionnalité, car elle est basée sur tout type de norme (publique).
Stefan Kögl


-1

L'instruction sep = est utilisée dans tous les pays où la virgule est utilisée comme délimiteur décimal, comme l'Italie. Comme Excel exporte CSV en utilisant des points-virgules au lieu de virgules dans ces pays, si vous voulez être sûr que le fichier peut être lu aux États-Unis ou dans d'autres pays, vous avez BESOIN

sep =;

en haut du fichier. Ceci est spécifique à Excel et peut être ignoré par d'autres applications.


-2

À peu près n'importe quel outil pouvant importer à partir de fichiers .csv reconnaît que la virgule n'est pas le seul séparateur possible, les tabulations sont courantes depuis longtemps par exemple. Je pense que cela remonte même à l'époque des cartes perforées, qu'il doit y avoir un caractère reconnu comme fin de champ de données - à l'exception des systèmes qui utilisent des champs à largeur fixe ou des champs à préfixe de longueur à peu près tous les systèmes en ont besoin depuis l'avènement des ordinateurs.

Les 3 éléments essentiels sont un séparateur de champs, un séparateur d'enregistrements et un marqueur de fin de données, csv utilise par défaut des virgules, des sauts de ligne et des fins de fichier pour ceux-ci, mais à peu près n'importe quelle entrée valide peut être utilisée, vous avez cependant besoin d'un mécanisme pour échapper aux marqueurs spéciaux s'ils se produisent dans vos données valides.

Un système historique que j'ai rencontré utilisait une nouvelle ligne pour la fin du champ, 2 lignes vides pour la fin de l'enregistrement et *!*!* END *!*!*pour la fin des données. Je suis souvent tombé sur tout ,\t|:utilisé comme séparateur de champ avec divers caractères de contrôle.

Une chose à se méfier est que les Français et d'autres utilisent la virgule comme point décimal - cela peut provoquer toutes sortes d'amusements et de jeux. Il y a un certain degré de standardisation pour les fichiers csv dans rfc4180 mais il y a des moments où vous devez modifier manuellement les fichiers lors de l'exportation d'un programme et de l'importation vers un autre.

Pour répondre à la deuxième partie de votre question, Python, par exemple, inclut un lecteur / enregistreur csv comme l'une des bibliothèques standard offrant les options suivantes:

  • delimiter- Il s'agit du séparateur de champ (sauf s'il est échappé).
  • doublequote- Si vrai, un " dans un champ sera représenté comme""
  • escapechar- supprime toute signification spéciale de tout caractère suivant, par exemple s'il est défini sur \alors, quote peut être représenté comme\"
  • lineterminator- généralement l' un des \n, \r, \r\nou\n\r
  • quotechar- caractère utilisé pour citer des chaînes, généralement "ou'
  • quoting - drapeau comme l'un des:
    • ALL - Chaque champ est entre guillemets, c'est-à-dire: "1","Free Beer","ASAP"
    • MINIMAL - Ne citer que les champs qui ont des caractères spéciaux, à savoir: 1,"Beer, (Free)", Now, Please
    • QUOTE_NONNUMERIC - Citez tout ce qui n'est pas un nombre, c'est-à-dire: 1,"Beer, (Free)", "Now", "Please"
    • NONE - Ne citez pas escape à la place, c'est-à-dire: 1,Beer\, (Free), Now, Please
  • skipinitialspace- sautez tout espace de tête de chaque champ afin de pouvoir l'utiliser , plutôt que simplement ,comme séparateur de champ.

Généralement, un outil plus flexible et bien pensé qui peut importer des fichiers csv est le plus de ces options, (éventuellement avec des noms et / ou des mécanismes différents), qu'il aura.


2
Cela ne répond pas à ma question. Il explique ce que sont les CSV, que je connais déjà. Ma question concerne un morceau de syntaxe spécifique. Y a-t-il un contexte que je pourrais ajouter à ma question pour clarifier les choses?
Burhan Ali

1
Merci mais cela n'aide toujours pas. sep=n'est pas un paramètre pour un analyseur. J'ai ajouté quelques éclaircissements à ma question.
Burhan Ali

1
@SteveBarnes Mais un outil, par exemple la bibliothèque Python que vous mentionnez, autorise-t-il des options dans le cadre du contenu du fichier? C'est, je pense, le point principal de la question.
Randy Orrison

1
"Parce qu'ils sont l'une des nombreuses bizarreries excellentes." Est- ce bien? Cela fait partie de ce que j'essaie de comprendre. Je ne veux pas savoir ce qu'est un CSV. Je ne veux pas savoir comment analyser un CSV. Je veux savoir ce que sep=c'est et d'où ça vient.
Burhan Ali

2
sep = est une méthode d'indication spécifique à Microsoft Excel qui n'est couverte par aucune spécification non Microsoft que je puisse trouver. Il provient d'une partie de Microsoft.
Steve Barnes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.