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

C# Discussion :

Export d'un dataset vers un fichier csv


Sujet :

C#

  1. #1
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut Export d'un dataset vers un fichier csv
    Bonjour,
    Je dois exporter un relativement gros volume de données contenues dans un DataSet vers un fichier type csv.
    Je l'ai fais de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using (StreamWriter sw = new StreamWriter("C:\\temp\\export.txt", false, Encoding.Default))
          {
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
              foreach (object obj in dr.ItemArray)
              {
                sw.Write(obj.ToString() + ";");
              }
              sw.Write("\r\n");
            }
          }
    N'y a-t-il pas une manière de faire un peu plus rationnelle ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Par défaut
    Non

    N'oublie pas le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(obj.ToString(),";","zzz")
    Si tu as des strings avec des ; tu peux avoir des problèmes

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salup ppphil

    C'est la bonne maniere ...

    Personellement j'utilise plutot des tabs que des ";", c'est plus safe, car un vrai csv doit aussi avoir les quotes de delimitation de texte

    J'ecris aussi une premiere ligne contenant les noms des datacolumns

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Method string.Join( string separator,string[] value)

    Toutefois si le separator ou une doublequote apparait dans une value, il faudra encadrer cette value de doublequotes, en prenant soin auparavant de remplacer les éventuelle doublesquotes de la value par 2 doublequotes.
    Exemple : (avec séparateur = virgule)
    A,B ==> "A,B"
    A"B ==> "A""B"
    A,b"C" ==> "A,b""C"""[/code]

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Je ne suis pas sur que le join aide beaucoup car il faut d'abord convertir le datarow en tableau de string

    Personellement je trouve que la boucle offre plus de souplesse
    Pour ma part j'utilise un stringbuilder et j'appelle une methode pour faire l'ajout du séparateur choisi et des délimiteurs de texte eventuels

    Comme ca je peux définir "a la carte" la découpe a produire
    Et je ne fais qu'un seul WriteLine par Row quand la chaine est construite.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Join admet aussi comme paramètres des list ou des enumerables, mais je ne maîtrise pas.

  7. #7
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Merci à tous pour vos commentaires.

    Citation Envoyé par olibara Voir le message
    Pour ma part j'utilise un stringbuilder et j'appelle une methode pour faire l'ajout du séparateur choisi et des délimiteurs de texte eventuels
    J'ai toujours un doute quant à l'utilisation des stringBuilder. J'ai fais une version avec et une sans.
    Sur des gros volumes de données, je ne vois pas de différence de temps de traitement. La version avec stringbuilder semble même encore un peu plus lente que la version avec concaténation.
    ....

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    J'ai toujours un doute quant à l'utilisation des stringBuilder. J'ai fais une version avec et une sans.
    Sur des gros volumes de données, je ne vois pas de différence de temps de traitement. La version avec stringbuilder semble même encore un peu plus lente que la version avec concaténation
    En terme de mecanique d'arriere plan un stringbuilder est certainement plus élégant et efficace que la concénation de chaine

    Mais au dela de cette considération je trouve franchement que l'usage du stringbuilder offre généralement plus de souplesse et une meilleure lisibilité de code

    Et ca evite aisément les codes tout pourris bourré de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String monstring="abbbb,"+textbox.text+","+untruc+","+int.tostring()+"\""+DateTime.Now.Year.Tostring()+"\""+"\r\n";
    Tu vois ce que je veux dire

  9. #9
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Tu vois ce que je veux dire
    Tout à fait Monseigneur !!
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exporter requête vers un fichier *.csv
    Par cédoula dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 14/01/2008, 17h37
  2. Exporter une table MySQL vers un fichier CSV
    Par sam01 dans le forum Outils
    Réponses: 2
    Dernier message: 07/08/2007, 16h44
  3. [ODBC] problème d'export du contenu de <textarea> vers un fichier csv
    Par maraly dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/04/2007, 09h14
  4. [Macro]exporter une table vers un fichier.csv
    Par samca dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2007, 21h25
  5. [Oracle] export vers un fichier csv
    Par illegalsene dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/10/2005, 23h58

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