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 :

Création fichier CSV colonne par colonne


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Par défaut Création fichier CSV colonne par colonne
    Bonjour à tous, je souhaiterai savoir s'il était possible de créer un fichier CSV en le remplissant non pas ligne par ligne mais colonne par colonne. Je m'explique, je dispose de données de compteurs qui à une date "T" est associée une valeur "V". Du coup, je voudrais remplir un fichier CSV de la manière suivante :

    Colonne1----Colonne2---Colonne3.....
    Date--------Compteur1--Compteur2 .....
    jj/MM/aaaa -CPT1.Val1 --CPT2.val1 ...
    jj/MM/aaaa -CPT1.val2 --CPT2.val2....

    Mais malheureusement, je ne peux récupérer ces données que par sélection de compteurs et non pas par sélection de date. D'où ma demande de remplissage par colonne.

    D'avance merci pour votre aide

  2. #2
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Il faut que les lignes soient créées, dans ton cas les lignes sont définies par le nombre de valeurs d'un compteur si je comprend bien, si le nombre de valeur d'un compteur est fixe, tu doit créé X lignes à l'avance, ou X représente le nombre de valeur de tes compteurs.

    Dans le cas ou le nombre de valeur est variable tu vérifies, si la ligne est créée, tu mets la valeurs, sinon tu en crées une nouvelle ainsi de suite.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Par défaut
    Merci de ta réponse mais du coup je ne vois pas comment cela pourrait me servir. Car en fait, moi ce que je souhaite c'est d'abord de renseigner toute la première colonne puis ensuite toute la deuxième colonne et ainsi de suite. Pourrais-tu être plus précis dans ta réponse, merci

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Supposons que tu connais à l'avances le nombre de valeurs par compteur.
    X est le nombre de lignes.
    D'abord je crée les X lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0;i<X; i++)
    {
       //Insérer une ligne vide
    }
    ensuite on crée une colonne par compteur, et on parcourir toutes les lignes pour mettre les valeur de ce compteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int c=0;i<Nombre de compteur;c++)
    {
      var compteur = compteurs[c];
      for(int l=0;l<X,l++)
      {
         ligneXL[l][c] = compteur.Valeurs[l]; //En supposant que tu as une collection de valeurs (Valeurs) dans ta classe compteur.
      }
    }

    Ce n'est pas du code à exécuter mais juste pour que tu comprenne la démarche à suivre.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Par défaut
    Ah pas bête je n'y avais pas pensé! Je regarderai ça dès demain! Merci

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Si tu as gardé la structure que je t'avais conseillé, il est possible de faire ça facilement avec LinQ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var orderedCounters = counters.OrderBy(c => c.Name);
     
    var header = DATE_COLUMN_NAME + CSV_SEPARATOR;
    var counterColumnsNames = orderedCounters.Select(c => c.Name);
    header += string.Join(counterColumnsNames, CSV_SEPARATOR);
     
    var dates = orderedCounters.Select(c => c.Records).SelectMany(r => r.Date).OrderBy();
     
    foreach(var date in dates)
    {
        var line = date.ToString() + CSV_SEPARATOR;
        var valuesForDate = orderedCounters.Select(c => c.Records)
                                            .Where(r => r.Date == date)
                                            .Select(r => r.Value);
        line += string.Join(valuesForDate, CSV_SEPARATOR);
    }

    Bon c'est un premier jet écrit directement dans la textbox du forum alors ça peut ne pas compiler/fonctionner/faire le café (rayer la mention inutile ) mais dans l'idée, ça devrait te permettre de faire ce dont tu as besoin.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Par défaut
    Merci Maxime, non je n'ai malheureusement pas eu le temps de tester ton exemple mais dès que ça avance de mon côté je t'en ferais part.

  8. #8
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Même si tu as une structure différente, la solution fonctionne quand même. Je disais ça parce que j'ai utilisé la structure de l'autre thread, ne sachant pas ce que tu avais décidé
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

Discussions similaires

  1. Fichier CSV : Recherche et Colonne
    Par Antho42 dans le forum C#
    Réponses: 4
    Dernier message: 10/03/2009, 13h05
  2. Tri fichier CSV suivant plusieurs colonnes
    Par ddouet2000 dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2009, 15h58
  3. Création fichier csv
    Par krfa1 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/11/2005, 11h30
  4. affichage colonne par colonne
    Par tjoce dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2005, 19h19
  5. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 16h31

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