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

Modules Perl Discussion :

Recherche un Parser Générique


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut Recherche un Parser Générique
    Bonjour,

    Je recherche un Parser Générique.
    J'ai besoin d'analyser une dizaine de type de fichiers différents.
    Ce sont des fichiers de Control permettant le chargement d'objets divers dans des Progiciels. Ils font en général plusieurs dizaines de Mo.

    Il me semble que dans CPAN j'avais vu quelque chose d'approchant, mais impossible de le retrouver.

    Le style des fichiers est plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    objniveau1 objtype(name) param2('valeur')
    param3 param4(valeur)
    param5 etc...
    objniveau2 
    objtype(name) param2 param8(valeur) param9('valeur')
    param3 param4 param7
    objniveau1 etc...
    Il n'y a pas d'ordre dans les paramètres, quelques fois la valeur n'est pas présente et peut être entre simple cote dans les parenthèse.
    Pour d'autre fichier la valeur suit le paramètre sans pour autant que cette valeur soit obligatoire (donc on se retrouve sur un mot clé).
    Pas d'indentation, pas de balise de début et/ou de fin.
    La définition d'un objet et de ses objets fils peut être sur plusieurs lignes.

    J'ai essayé en traficotant des parser JSON ou YAML sans grande réussite
    J'ai aussi développé un module qui me rend quelques services, mais il est trop compliqué, torturé, pas assez générique et me fait monter la tension quand je le modifie.

    Par avance merci de votre aide.

    DCA

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Vu la tête du fichier, je ne vois pas trop d'autre solution que d'écrire soi-même le parser.

  3. #3
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par dca_marshall Voir le message
    J'ai aussi développé un module qui me rend quelques services, mais il est trop compliqué, torturé, pas assez générique et me fait monter la tension quand je le modifie.
    Bonjour,

    Merci pour ta réponse, mais c'est déjà fait (ci-dessus).

    Toutefois je relance le sujet sur le parser générique.

    Je suis sûr d'avoir vu quelque chose de ce type sur CAPN, mais impossible de retrouver comment je suis tombé dessus à l"époque (c'était il y a qq mois).

    Merci encore de votre contribution.
    DCA

  4. #4
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut Parse::RecDescent
    Bonjour,

    Je reviens à la charge avec mon Parser.
    Je n'est rien trouvé de mieux que Parse::RecDescent (c'était peut-être bien ce que je cherchai et que j'ai nommé générique...).

    Toutefois j'ai un peu de mal avec. Je n'arrive pas à tout détecter

    Quelqu'un saurait-il m'aider sur ce Parser ou y aurait-il un Tuto (spécial neuneu) en Français quelque part

    Par avance merci de votre aide.

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    J'ai vu un tuto pas mal fait dans le livre "Data Munging with Perl" sur ce super module de Damian Conway, mais c'est en anglais.

    A voir si ce livre a été traduit en français, mais je n'en ai pas l'impression.

  6. #6
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Je confirme, ce bouquin n'est pas traduit en Français...
    Mais effectivement il parait contenir des choses intéressantes.
    Aller je le prend.
    Merci pour cette info Lolo78

    Je reste toujours en recherche d'aide sur RecDescent, merci d'avance.

  7. #7
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Mon problème est le suivant...

    Les lignes du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CONTROL1 PARAM1(AA)
      PARAM2(BB) PARAM3(CC)
      PARAM4(DD)
      PARAM5('EE ii oo $truc')
      CONTROL2 PARAM6(FF) PARAM7(GG)
    Grammaire:
    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
     
     
    value         : /\(/ /[A-Z0-9]+/i /\)/ { return $main::VALUE=$item[2]; }
     
    descr         : /\(\'/ /[A-Z0-9 ,:;$£@]+/i /\'\)/ { return $main::VALUE=$item[2]; }
     
    parameter     : /[A-Z0-9]+/i
     
    getParameter  : parameter  { $main::PARAM=$item[1]; }
     
    paramAndValue : getParameter value { return main::print_parameterStatement(@item) }
                  | getParameter descr { return main::print_parameterStatement(@item) }
     
    control       : /CONTROL1/i
                  | /CONTROL2/i
     
    getControl    : control { $main::CONTROL=$item[1]; }
     
    line          : getControl(s?) paramAndValue(s?)
                  | paramAndValue(s)
     
    startrule     : line
    Je récupère bien CONTROL1, PARAM1 avec "AA", PARAM2 avec "BB", PAPRAM4 avec "DD", PARAM5 avec "EE ii oo $truc", CONTROL2, PARAM6 avec "FF",
    mais je ne récupère pas PARAM3 avec "CC", ainsi que PARAM7 avec "GG".
    Je ne reçois qu'une référence à un ARRAY dans lequel je trouve (avec DataDumper) :

    Une idée ??? Une remarque ???

    Merci d'avance.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Manifestement, tu ne récupères pas les params quand il y en a plus d'un param sur la même ligne.

    Je pense que tu as peut-être un problème dans ta définition de ligne dans ta grammaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    line          : getControl(s?) paramAndValue(s?)
                  | paramAndValue(s)
    Je ne connais pas la syntaxe, mais il faut sans doute spécifier que la ligne peut contenir un contrôle suivi d'une ou plusieurs paramValues.

  9. #9
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Merci Lolo78, tu suis. J'apprécie

    Toutefois c'est le but du (s?) dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line          : getControl(s?) paramAndValue(s?)
    Le truc c'est que j'ai essayé aussi ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line          : getControl(s?) paramAndValue paramAndValue
    mais sans succès

  10. #10
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Bonjour les gens,

    Je viens de résoudre mon problème

    Il ne faut pas mettre return dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { return main::print_parameterStatement(@item) }
    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { main::print_parameterStatement(@item) }
    En effet, avec return le premier Token (ou expression) trouvé est consommé et le parsing ne passe pas à la suite sur une même ligne.

    C'était pas super clair dans la doc, mais voilà pour ceux que cela intéresse.

    Bonne année à tous et plus particulièrement à Lolo78

  11. #11
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dca_marshall Voir le message

    Bonne année à tous et plus particulièrement à Lolo78
    Bonne année à toi aussi.


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2012, 19h48
  2. Faire une recherche avec caractère générique
    Par Fredncy dans le forum Excel
    Réponses: 4
    Dernier message: 30/07/2009, 10h00
  3. Rechercher-Remplacer Caractère Génériques
    Par slibois dans le forum Excel
    Réponses: 3
    Dernier message: 29/04/2008, 14h20
  4. Recherche un parser XML (très) "permissif"
    Par sebidon dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 10/01/2008, 12h03
  5. [XML] recherche un parser cross platform : libXML2 ou Xerces ???
    Par baert dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 13/09/2005, 14h49

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