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 :

soucis avec Ienumerable et csvhelper c# [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut soucis avec Ienumerable et csvhelper c#
    Bonjour,
    Mon objectif est de lire un .csv (un tableau excel en gros) de rentrer chaque colonne dans une liste , faire du traitement sur les valeurs de la liste(moyenne glissante etc ..) puis de réécrire un .csv avec les nouvelles valeurs c'est à dire celles qui ont été traité. Pour cela j'utilise la bibliothèque csvhelper car elle est plutôt simple à utiliser.
    J'ai réussi à faire la lecture du .csv et de rentrer chaque colonne dans des listes, faire le traitement mais je bloque sur la partie réécriture du .csv
    En effet la réécriture demande en entrée un Ienumerate et je ne sais pas trop comment le créer à partir des différentes listes.
    Si quelqu'un peut me donner une petite idée.


    Voici le code pour le moment
    La classe qui hierarchise le .csv correspond au nom des différentes colonnes

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace test2
    {
        class dataactuelle
        {
            public int Index { get; set; }
            public int Time { get; set; }
            public double Pos_X { get; set; }
            public double Pos_Y { get; set; }
            public double Pos_Z { get; set; }
            public double Pos_A { get; set; }
            public double Pos_B { get; set; }
            public double Pos_C { get; set; }
            public double Out_1 { get; set; }
            public double Out_2 { get; set; }
            public double Out_3 { get; set; }
            public double Out_4 { get; set; }
            public double Out_5 { get; set; }
            public double Out_6 { get; set; }
            public double Out_7 { get; set; }
            public double Out_8 { get; set; }
        }
    }
    Code permettant de lire le .csv et de rentrer les colonnes dans des variables


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using CsvHelper;
    namespace test2
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                var csv = new CsvReader(new StreamReader("nom.csv"));
                csv.Configuration.Delimiter = ";";
                var datapro = csv.GetRecords<dataactuelle>().ToList();
     
                List<int> Index = new List<int>();
                List<int> Time = new List<int>();
                List<double> Pos_X = new List<double>();
                List<double> Pos_Y = new List<double>();
                List<double> Pos_Z = new List<double>();
                List<double> Pos_A = new List<double>();
                List<double> Pos_B = new List<double>();
                List<double> Pos_C = new List<double>();
                List<double> Out_1 = new List<double>();
                List<double> Out_2 = new List<double>();
                List<double> Out_3 = new List<double>();
                List<double> Out_4 = new List<double>();
                List<double> Out_5 = new List<double>();
                List<double> Out_6 = new List<double>();
                List<double> Out_7 = new List<double>();
                List<double> Out_8 = new List<double>();
     
                foreach (var element in datapro)
                {
     
     
                    Index.Add(element.Index);
                    Time.Add(element.Time);
                    Pos_X.Add(element.Pos_X);
                    Pos_Y.Add(element.Pos_Y);
                    Pos_Z.Add(element.Pos_Z);
                    Pos_A.Add(element.Pos_A);
                    Pos_B.Add(element.Pos_B);
                    Pos_C.Add(element.Pos_C);
                    Out_1.Add(element.Out_1);
                    Out_2.Add(element.Out_2);
                    Out_3.Add(element.Out_3);
                    Out_4.Add(element.Out_4);
                    Out_5.Add(element.Out_5);
                    Out_6.Add(element.Out_6);
                    Out_7.Add(element.Out_7);
                    Out_8.Add(element.Out_8);
     
     
                }
     
     
                // traitement 
     
     
               //on reccupère les valeurs dans une liste 
    List<double> Pos_X_traitee = new List<double>();
     
     
     
            }
        }
    }

    Code pour l'écriture dans un autre .csv
    Fonctionne juste apres une lecture d'un .csv inital

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var csv = new CsvReader(new StreamReader("nom.csv"));
                csv.Configuration.Delimiter = ";";
                var datapro = csv.GetRecords<dataactuelle>().ToList();
     
     
     
     var csv3 = new CsvWriter(new StreamWriter("Writer.csv"));
               csv3.Configuration.Delimiter = ";";
               csv3.WriteRecords(datapro);
    Voila j’espère que c'est assez clair
    Bonne journée

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    En effet la réécriture demande en entrée un Ienumerate et je ne sais pas trop comment le créer à partir des différentes listes.
    Si quelqu'un peut me donner une petite idée.
    IEnumerate n'est pas une interface standard. Ne serait-ce pas plutôt IEnumerable ?

    Quelle est le problème exactement ? Qu'est-ce qui te bloque dans l'écriture du CSV ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Bonjour dorinf,
    Merci pour la réponse
    Oui c'est bien IEnumerable en fait !
    C'est de créer le IEnumerable et d'y rentrer toutes mes données, comme ça j'aurai juste à le rentrer dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvs.WriteRecords(nomdeIEnumerble)
    pour générer mon .csv

    J'imagine que c'est une collection ou liste d'objet "dataactuelle" dans mon cas. Mais je ne vois pas comment faire une boucle pour rentrer toutes mes valeurs une à une.

    Voici un code qui montre un peu ce que je veux faire (il est totalement faux par contre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     // création de la variable
                IEnumerable<dataactuelle> valeurfiltree;
                //remplissage du IEnumerable
                for (int k =0;k<=Out_3.Count();k++)
                {
                    dataactuelle nom1= new dataactuelle (valeur1, valeur2, valeur3, .....)
                    valeurfiltree.add(nom1);
                }
                //ecriture
               var csv3 = new CsvWriter(new StreamWriter("Writer.csv"));
               csv3.Configuration.Delimiter = ";";
               csv3.WriteRecords(valeurfiltree);

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    D'accord. Dans ce cas, utilise simplement une List. Cette classe implémente IEnumerable (comme quasiment toutes les collections fournies par le framework .Net)

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                List<dataactuelle> valeurfiltree = new List<dataactuelle>();
                //remplissage du IEnumerable
                for (int k =0;k<=Out_3.Count();k++)
                {
                    dataactuelle nom1= new dataactuelle (valeur1, valeur2, valeur3, .....)
                    valeurfiltree.add(nom1);
                }
                //ecriture
               var csv3 = new CsvWriter(new StreamWriter("Writer.csv"));
               csv3.Configuration.Delimiter = ";";
               csv3.WriteRecords(valeurfiltree);

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    Ça fonctionne très bien avec List
    Merci beaucoup
    Bonne journée

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 10
    Par défaut
    REbonjour,
    J'ai une dernière question :
    Sur la ligne si dessous je crée en fait un object assez grand il y a 25 valeurs à remplir. Est-ce que c'est possible pour le dernier tour de boucle (pour k= out_3.count() ) que le programme n'ait pas le temps de tout remplir et que du coup une partie des valeurs ne soient pas rentrée avant que la boucle se termine ?
    Car j'ai un soucis avec mon .csv , la dernière ligne ne se remplie pas entièrement. (Cf Pièce jointe)
    Ça risque d'entrainer des soucis pour le reste du programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataactuelle nom1= new dataactuelle (valeur1, valeur2, valeur3, .....)
    Merci d'avance
    Et si vous avez une solution pour résoudre le problème ça serait top !
    Images attachées Images attachées  

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

Discussions similaires

  1. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  2. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 08h56
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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