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

Windows Forms Discussion :

parser un fichier avec header


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 44
    Points
    44
    Par défaut parser un fichier avec header
    Bonjour à tous, je souhaiterais pouvoir rechercher un "champ" particulier dans un fichier text comprenant une entête, par exemple :

    "nom","prenom","age",
    "toto","tutu","123",

    j'ai une liste déroulante contenant le nom des champs du header, je voudrais par exemple que lorsqu'on sélectionne le champ prenom, ne sortir que le mot tutu.

    Dans le code ci dessous , je lis l'entête, cherche le nom du champ, copie la chaine de caractere du début jusqu'au champ et compte le nombre de virgule.

    Mais après je ne vois pas trop comment faire, y a t il plus simple?

    merci d'avance

    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
     
     
    StreamReader mearfile = new StreamReader(openFileDialog.OpenFile());
     
                string sHeader = mearfile.ReadLine();
     
                string sFieldName = sHeader.Substring(0, sHeader.IndexOf(fieldNameList.SelectedItem.ToString()));
     
                int iFieldName = Regex.Matches(sFieldName, ",").Count;
     
                //Console.Write(iFieldName.ToString()+"\n");
     
                string line;
     
                string textfound;
     
                while ((line = mearfile.ReadLine()) != null)
                {
     
                }

  2. #2
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    ce serait pas plus simple avec Split ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                string fields = sHeader.Split(",");
                iFieldName = fields.IndexOf("\"" + sFieldName + "\"");
    ...
    Après je n'ai pas compris ce que tu voulais faire exactement... extraire le champ demandé ? recherché une valeur particulière de ce champ ?

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Cherche une bibliothèque nommée FileHelpers. Elle gère très bien le CSV.

  4. #4
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    La classe Microsoft.VisualBasic.FileIO.TextFieldParser le fait aussi (il faut ajouter une référence à Microsoft.VisualBasic.dll)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 44
    Points
    44
    Par défaut
    Je vais résumer :

    -tout les champs contenus dans le header sont contenu dans une liste déroulante

    - je choisi un champ dans la liste

    - j'entre des critères de recherche ( is like , null , < nombre de char , > nombre de char)

    - le programme doit retourner les valeur du champ qui correspondent a mes critères de recherche.

    je comptais donc :

    - lire le header

    - déterminer à quel emplacement se trouve le champ

    - lire chaque champ (data) de chaque ligne et sortir la valeur de ce champ si elle correspond à mes critères de recherche.

    le fichier est du type :

    "nom","prenom","age",

    "toto","tutu","123",

    Attention, certaines valeur de champ peuvent contenir une virgule

  6. #6
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Citation Envoyé par czezko Voir le message
    Attention, certaines valeur de champ peuvent contenir une virgule
    Avec la classe TextFieldParser, ça ne devrait pas poser de problème : il y a une propriété HasFieldsEnclosedInQuotes, qui permet d'ignorer les séparateurs s'ils sont dans une chaine entre guillemets

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 44
    Points
    44
    Par défaut
    mon code devient alors ... mais pour la suite je suis un peu paumé

    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
     
            private void findButton_Click(object sender, EventArgs e)
            {
                Stream mearfile = openFileDialog.OpenFile();
     
                TextFieldParser parser = new TextFieldParser(mearfile);
     
                parser.TextFieldType = FieldType.Delimited;
     
                parser.SetDelimiters(",");
     
                parser.HasFieldsEnclosedInQuotes = true;
     
                string[] fields;
     
                fields = parser.ReadFields();
            }

  8. #8
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Il faut d'abord lire la première ligne (en-têtes) pour connaitre la position du champ recherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string fieldHeaders = parser.ReadFields();
    int index = -1;
    for (int i = 0; i< fieldHeaders.Length; i++)
    {
        if (fieldHeaders[i] == "<nom du champ recherché>")
        {
            index = i;
            break;
        }
    }
    Ensuite, on lit le fichier en boucle, et pour chaque ligne qui correspond on l'ajoute au résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();
        if (fields[index] == "<valeur recherchée>")
            results.Add(fields);
    }

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 44
    Points
    44
    Par défaut
    merci beaucoup, c'est un peu à cela que je pensais, mais je ne savais pas s'il existait un moyen plus simple.

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

Discussions similaires

  1. Parser un fichier avec JavaScript
    Par happy_man dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 21/05/2013, 19h53
  2. include dans un fichier avec header text/javascript
    Par shawidoom dans le forum Langage
    Réponses: 7
    Dernier message: 13/06/2011, 21h51
  3. Parser un fichier avec sax
    Par zalalus dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/01/2009, 12h11
  4. duree pour parser un fichier avec un script awk
    Par kass28 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/03/2008, 16h35
  5. parser un fichier avec xerces
    Par traiangueul dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 02/02/2004, 18h14

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