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

VB.NET Discussion :

Parser dynamiquement fichier txt [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut Parser dynamiquement fichier txt
    Bonjour, petit casse tête pour vous aujourd'hui.

    Voilà le topo, je dois créér un petit programme qui demande à l'utilisateur d'entrer un masque du type [Attribut1] [Attribut2] / [[Attribut3]] qui correspondrait par exemple dans la réalité à un annuaire de cette forme :

    DUJARDIN Jean / [2012-04-08 01:02:03]
    MERAH Mohammed / [2012-05-02 08:04:03]
    SARKOZY Nicolas / [2011-03-01 10:02:09]

    /!\ Les fichiers à parser sont tous formatés différement, d'où le coté "dynamique".

    Je dois ensuite, à l'aide de ce masque, parser le fichier. Pour se faire, j'ai analysé le masque pour capturer le nom des Attributs. Ensuite, j'ai capturé les séparateurs entre un [Attribut] et un autre [Attribut].

    Me voilà donc avec le nom des attributs, leur nombre, les séparateurs et leur nombre.

    Comment parser ce fichier en ayant cela ? Des idées ?

    Je ne peux décemment pas utiliser de Regex car le masque ne m'apporte pas assez de précision. J'ai tenté de spliter avec ma liste de séparateur, mais du coup il split dès qu'il voit un espace.

    Je vous remercie !

  2. #2
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    peut d'abord parse avec le / tu obtiendras deux group
    attribut1 attribut2 groupe1
    attribut3 groupe2

    parse après le groupe1 avec l'espace

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par shayw Voir le message
    Salut

    peut d'abord parse avec le / tu obtiendras deux group
    attribut1 attribut2 groupe1
    attribut3 groupe2

    parse après le groupe1 avec l'espace
    Ce n'est pas envisageable, car si en effet ce que tu dis marche dans l'exemple simpliste que j'ai donné plus haut, il n'en va pas de même pour d'autres.

    Et puis même, ce n'est pas assez dynamique pour moi . Clairement, mon logiciel doit pouvoir parser, et ceux sans savoir à quoi ressemble le fichier log.


    Ce que j'envisageai de faire, c'est tout de même d'essayer de traduire le masque en une regex. Former une regex à l'aide de mes séparateurs. En faite ça parait évident .

  4. #4
    Invité
    Invité(e)
    Par défaut
    perso je trouve que les noms de ton exemple sont pas très judicieux!!!!!

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par gcorbineau Voir le message
    perso je trouve que les noms de ton exemple sont pas très judicieux!!!!!
    Je savais que l'exemple Jean Dujardin ne plairait pas à tout le monde. C'est mon petit coté provocateur.

    Sinon je confirme que cela marche.
    Merci pour ta réponse shayw, et désolé pour le post inutile.

  6. #6
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Clairement, mon logiciel doit pouvoir parser
    mais il te faut au moins une base
    comment as tu parsé ton ex selon attribut1 attribut2 attribut3
    essaie de donner un autre ex pour mieux illustrer

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    si tu nous donnes un exemple faux, on va te donner des solutions fausses

    les regex sont beaucoup moins performant que des split, indexof et autres substring, sur quelques lignes ce n'est pas grave, mais si tu as des milliers de lignes c'est à prendre en compte

    après pour les noms et prénoms le cas classique c'est les noms et/ou prénoms composés
    si ton séparateur est un espace ce n'est pas la peine de commencer coder

    au final si tu veux pouvoir décomposer des strings sans le coder en dur dans l'appli, il faut que le code soit créé pendant l'exécution
    pour ca il faut mettre le paramétrage dans un fichier ou une base de données
    et faire un éditeur dans l'appli pour permettre de définir un décodage de fichier
    ce paramétrage peut etre directement du code vb.net, ca évite d'avoir à modéliser des instructions graphiquement, et on peut compiler du code à la volée

    Citation Envoyé par gcorbineau Voir le message
    perso je trouve que les noms de ton exemple sont pas très judicieux!!!!!
    ce ne sont que des exemples ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si tu nous donnes un exemple faux, on va te donner des solutions fausses
    Oui mais j'ai quand même bien précisé qu'il me fallait trouver une solution dynamique qui puisse s'adapter à n'importe quel fichier à parser .

    Citation Envoyé par Pol63 Voir le message
    les regex sont beaucoup moins performant que des split, indexof et autres substring, sur quelques ce n'est pas grave, mais si tu as des milliers de lignes c'est à prendre en compte
    C'est bon à savoir, parce que c'est un peu mon cas. A voir.

    Citation Envoyé par Pol63 Voir le message
    après pour les noms et prénoms le cas classique c'est les noms et/ou prénoms composés
    si ton séparateur est un espace ce n'est pas la peine de commencer coder
    En faite il s'agit de fichier log avec log4net, mais vu qu'il n'y a pas de standard dans mon entreprise, ben ils sont tous formatés différement... Et moi je dois parser là-dessus !

    Citation Envoyé par Pol63 Voir le message
    au final si tu veux pouvoir décomposer des strings sans le coder en dur dans l'appli, il faut que le code soit créé pendant l'exécution
    pour ca il faut mettre le paramétrage dans un fichier ou une base de données
    et faire un éditeur dans l'appli pour permettre de définir un décodage de fichier
    ce paramétrage peut etre directement du code vb.net, ca évite d'avoir à modéliser des instructions graphiquement, et on peut compiler du code à la volée
    Je leur soumettrai l'idée en effet. Merci

  9. #9
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas transformer le pattern en pattern de regexp ?

    [Attribut1] [Attribut2]/[[Attribut3]]

    A priori, devrait être transformé en un truc du genre : "(.*) (.*)/\[(.*)\]"

    Ensuite, tu n'as plus qu'à parcourir les Matches.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Pourquoi ne pas transformer le pattern en pattern de regexp ?

    [Attribut1] [Attribut2]/[[Attribut3]]

    A priori, devrait être transformé en un truc du genre : "(.*) (.*)/\[(.*)\]"

    Ensuite, tu n'as plus qu'à parcourir les Matches.

    C'est exactement ce que je me suis décidé à faire. Mais du coup je bloque sur la partie "tu n'as plus qu'à parcourir les Matches".

    Je souhaite stocker chaque match dans un attribut d'un de mes objets.
    Les attributs de cet objet s'appellent Attribut1, Attribut2, Attribut3, ... (pas très original je sais).

    En gros, je veux faire un équivalent de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=0 to NombreDeMembre-1 Do
        objet.attribut[i] = _m.Groups(i).Value
    end for
    Donc ce bout de code est faux, je le sais, mais c'est pour vous faire saisir l'idée de ce que je veux arriver à faire... Etant donné que je ne sais pas combien d'attributs il y aura à parser, si j'arrive à faire l'idée ci-dessus, ce ne sera plus un problème.

  11. #11
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par shurikeNzL Voir le message
    Je souhaite stocker chaque match dans un attribut d'un de mes objets.
    Les attributs de cet objet s'appellent Attribut1, Attribut2, Attribut3, ... (pas très original je sais).
    Regarde du côté de la réflexion pour faire ça.

    Attention aux performances en revanche.

    Autre solution, tu utilises un dictionnaire : la clé est le nom de l'attribue, et la valeur sa valeur. Ça permet d'éviter d'utiliser la réflexion. En revanche, ça permet de stocker tout et n'importe quoi dans ton dictionnaire, sans pour autant respecter la moindre règle. Tu peux cependant coupler ça a un contrôle des noms d'attributs et de leurs valeurs.

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

Discussions similaires

  1. parser un fichier *.txt
    Par blaise4714 dans le forum Langage
    Réponses: 9
    Dernier message: 04/03/2009, 15h53
  2. Script shell pour parser un fichier txt
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/09/2008, 09h32
  3. Comment parser un fichier.txt sous Access?
    Par takepaf dans le forum VBA Access
    Réponses: 5
    Dernier message: 31/05/2007, 11h15
  4. Parser un fichier txt
    Par takepaf dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/05/2007, 11h29
  5. Parser un fichier TXT
    Par Blaireau dans le forum Langage
    Réponses: 5
    Dernier message: 08/08/2006, 20h28

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