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 :

ré-écriture de champs modifiés dans un fichier csv


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut ré-écriture de champs modifiés dans un fichier csv
    Bonjour à tous, n'ayant peut être pas les yeux en face des trous, je n'arrive pas à trouver le moyen de ré-écrire dans un fichier csv certains champs que je modifie par l'intermédiaire de textbox. (je suis sous visual 2010 et je développe en c#)

    Voilà ce que le projet doit faire (et ce que j'ai réussi à faire : ok)

    - lire et récupérer des informations sur un fichier xml (3 données que l'on peut appeler numgestion, reffab et numserie): ok

    - lire et parcourir un fichier csv (séparateur ";" ) pour retrouver si une ligne comporte parmi tous ses champs les 3 données xml lues précédemment: ok

    - si ligne trouvée, faire apparaitre dans un textbox la valeur d'un autre champ de cette ligne et pouvoir le modifier par la suite : ok

    - ré-importer (par un bouton) le contenu du textbox modifié dans la bonne ligne et le champ d'origine (sans toucher ni aux autres champs, ni aux autres lignes) : pas ok

    C'est peut etre tout simple à faire, mais là je suis perdu et je ne trouve pas la solution.

    Merci de votre aide et de m'orienter vers le bon codage.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut que tu reecrives tout le fichier CSV apres modification.

    Pour simplifier la tache, tu peux mapper ton fichier CSV a un modele, par exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MyModel
    {
        public int NumGestion { get; set; }
     
        public string ReffAb { get; set; }
     
        public int NumSerie { get; set; }
    }
    Ensuite quand tu lis ton CSV, tu charges chaque ligne et chaque valeur dans in nouvel objet MyModel.

    Au final, tu stockes tous ces objets dans une List<MyModel>.

    Ensuite tu fais faire la modif par l'utilisateur si necessaire.

    Au final, il te suffira de reconvertir cette liste en CSV, ce qui est plutot simple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var builder = new StringBuilder();
     
    foreach (var item in myList)
    {
        builder.Append(item.NumGestion);
        builder.Append(";");
        builder.Append(item.ReffAb);
        builder.Append(";");
        builder.Append(item.NumSerie);
        builder.Append(";");    // Celui-ci est optionnel
        builder.Append(Environment.NewLine); // Retour a la ligne
    }
    Une fois que tu as fait ca, le builder contient le contenu de ton fichier CSV, qu'il te suffit donc d'ecrire dans le fichier cible.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse DotNetMatt, je vais essayer de faire ça.

    Pour info je poste mon code (ce n'est peut être pas du top niveau dans la façon de coder, mais cette partie fonctionne) :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.OleDb;
    using System.Xml;
    using System.Text;
    using System.IO;
     
    namespace Projet1
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {            
            }
     
            protected void LireXml(string donnée_1, string donnée_2, string donnée_3)
            {
                string utilisateur = Environment.GetEnvironmentVariable("USERNAME");
                string fichier = @"/Users/" + utilisateur + "/desktop/epc.xml";
                XmlTextReader reader = new XmlTextReader(fichier);
     
                try
                {
                    while (reader.Read())
                    {
                        XmlNodeType nType = reader.NodeType;
                        if (nType == XmlNodeType.Element)
                        {
                            if (reader.Name.Equals("Info1"))
                            {
                                donnée_1 = reader.ReadElementString();                            
                            }
                            if (reader.Name.Equals("Info2"))
                            {
                                donnée_2 = reader.ReadElementString();                            
                            }
                            if (reader.Name.Equals("Info3"))
                            {
                                donnée_3 = reader.ReadElementString();                            
                            }
                        }
                    }                
                }
                finally
                {
                    if (reader != null)
                        reader.Close();
                }
     
                Affichage(donnée_1, donnée_2, donnée_3);            
            }
     
     
            protected void Affichage(string donnée_1, string donnée_2, string donnée_3)
            {           
                string utilisateur = Environment.GetEnvironmentVariable("USERNAME");
                string csv = @"/Users/" + utilisateur + "/desktop/monFichier.csv";
     
                foreach (string ligne in File.ReadAllLines(csv))
                {
                    string[] colonne = ligne.Split(';');
                    if (ligne.Contains(donnéé_1) && ligne.Contains(donnéée_2) && ligne.Contains(donnée_3) && ligne.Contains("Heures de fonctionnement"))
                    {
                        Textbox1.Text = colonne[12]; //je vais afficher ici la donnée qui va être modifiée par la suite (pour info mon fichier csv comporte une quinzaine de colonnes, mais il n'y a que le contenu
    de la 12ème que je cherche à faire afficher et modifier dans le fichier source en retour)
                    }
                    if (ligne.Contains(donnéé_1) && ligne.Contains(donnéé_2) && ligne.Contains(donnéé_3) && ligne.Contains("Kilomètres"))
                    {
                        Textbox2.Text = colonne[12]; //idem que précédemment                  
                    }                
                }
            }    
     
            protected void Valider_Click(object sender, ImageClickEventArgs e)
            {           
    		// C'est dans cette partie que je veux pouvoir faire enregistrer la modification apporté par un utilisateur des
    		// Textbox1 et Textbox2 dans la colonne[12] de monfichier.csv
     
            }
     
            protected void Lecture_Click(object sender, EventArgs e)
            {
                string donnée_1 = "";
                string donnéé_2 = "";
                string donnéé_3 = "";
                LireXml(donnéé_1, donnéé_2, donnéé_3);            
            }           
        }
    }

Discussions similaires

  1. Awk: afficher le champ x dans un fichier CSV.
    Par vandman dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 07/11/2014, 00h44
  2. [MySQL] Exporter le contenu d'un champ email dans un fichier csv
    Par thamis dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/01/2010, 16h17
  3. Modifier plusieurs champs dans un fichier Csv
    Par francois_a dans le forum Shell et commandes GNU
    Réponses: 36
    Dernier message: 02/09/2009, 17h31
  4. Écriture d'un champ texte dans un fichier
    Par rangersx dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2009, 13h34
  5. Réponses: 5
    Dernier message: 30/09/2005, 16h42

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