IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

Génération fichier csv pb avec ";"


Sujet :

.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Points : 71
    Points
    71
    Par défaut Génération fichier csv pb avec ";"
    Bonjour,

    Je génère un fichier csv à partir de données venant de la bdd de mon application.

    Le problème est que quand j'ai des données comme par exemple donnee1 qui est égale à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cette chaîne fait ";" complètement planter la génération  de mon csv
    Le fait que la donnée récupérée a ";" dans sa chaine est interprété comme une nouvelle colonne dans ma génération csv

    En gros la génération se fait en simplifiant pour l'instant comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    StreamWriter flux = new StreamWriter("D:\\essai.csv", false, System.Text.Encoding.Default);
    ...
    string ligne="";
     
    ligne = ligne + donnee1 + ";";
    ligne = ligne + donnee2 + ";";
    ligne = ligne + donnee3 + ";";
    ligne = ligne + donnee4 + ";";
    ....
    flux .Write(VLST_LIGNE);
    flux .Close();
    ...
    Comment faire en sorte que peu importe ce que contient la chaîne, celle ci soit interprété comme une colonne ?
    Pour l'instant je me retrouve avec plusieurs colonnes pour une même donnée(donnée tronquée sur plusieurs colonnes) ce qui est complètement incorrect.

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 161
    Points : 71
    Points
    71
    Par défaut
    Mon problème n'est pas à chaque fois que je rencontre ;
    Car si j'ai cette chaîne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cette chaîne fait ; complètement planter la génération  de mon csv
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cette chaîne fait ";" complètement planter la génération  de mon csv
    J'ai mis un mécanisme qui marche en place du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = ligne + "\""+donnee1 +"\""+ ";";
    ce qui permet dans ce cas d'échapper au fait que le ; soit reconnu comme le délimiteur pour la création d'une nouvelle colonne.

    Mon problème est quand ce délimiteur ; se trouve dans une des données entre guillemets comme dans la chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cette chaîne fait ";" complètement planter la génération  de mon csv
    Je ne vois pas comment réussir à restituer cette donnée sans la modifier.
    Mon problème étant que lorsqu'on ouvre le csv dans excel il faut que dans ma colonne donnee1 j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cette chaîne fait ";" complètement planter la génération  de mon csv
    et pas autre chose


    Merci pour vos conseils.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bah regarde comment ce genre de cas est traité par Excel par exemple...
    Enregistre en CSV une feuille de calcul avec une cellule qui contient ";", et regarde le résultat dans un éditeur de texte pour voir comment il encode ça

  4. #4
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    À lire http://fr.wikipedia.org/wiki/Comma-separated_values
    On doit ajouter les délimiteurs au début et en fin de chaine s'il y a au moins le caractère de séparation dans la chaine, et il faut doubler les délimiteurs de texte rencontrés dans la chaine.
    En france, le délimiteur est souvent le " et le séparateur le ;

    Conseil: String.Join(séprateur, valeurs[]) se chargera de mettre les séparateurs facilement.
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2012, 16h41
  2. Génération fichier .csv via une requête SQL
    Par matnys dans le forum Import/Export
    Réponses: 5
    Dernier message: 12/12/2011, 22h03
  3. Lire un fichier CSV envoyé avec une requête POST
    Par Marm B dans le forum Langage
    Réponses: 6
    Dernier message: 26/08/2009, 13h31
  4. Génération fichier csv problème accent
    Par marion782 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 11/08/2009, 09h16
  5. Réponses: 11
    Dernier message: 27/10/2008, 09h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo