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

Langage Perl Discussion :

Regex avec un switch


Sujet :

Langage Perl

  1. #21
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Ouaw! Tout d'abord un grand merci à tous, je comprend de mieux en mieux comment ça fonctionne =)

    @6ril : Je ne vais pas opté pour ta solution car j'ai 43 type jalon dans ma nouvelle base. Donc faire une requête par type jalon serait vraiment trop lourd... Beaucoup plus que mes 100 lignes de if je pense.

    @lolo78 : Merci pour tes remarques, j'ai modifié mes regex comme tu me la suggéré. Je ne ferai pas plusieurs regex sur la ligne car cela reviens au même finalement.

    Juste une question, si je met pas ".*" au début et à la fin de ma régex, elle va essayée de trouver par exemple le mot "revue" en début de phrase alors qu'il peut être en plein milieu non ?
    Ou si j'ai compris. Si je veux avoir "Revue" en début de phrase je devrait mettre "^Revue" c'est ça??

    L'erreur que Perl me mettait : "Reference to invalid group 0 in regex perl.. " Et je n'ai pas trouvé de topic qui répondait à ce problème.
    Aujourd'hui les regex que j'ai débouche sur de merveilleux résultat, elles me semble simple je ne vais pas faire de groupe. A moins que ce soit moins gourmand en traitement.

    Si je devais utilisé les groupes ça fonctionnerait comment ? est-ce que une regex comme ceci est juste ? Si oui alors ça me sert pas à grand chose dans mon cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($Ligne[3] =~ m/(Bilan.*?annuel)/gi){ ...


    Vous devez vous dire que je suis vraiment blonde de persister dans cette méthode mais je suis obligée de faire comme ça ^^

    Je parcours plusieurs tables d'une base de données,
    Avec chaque enregistrement récupéré je fais une requête avec les informations contenu dans celui-ci. Ce qui me donne d'autres données pour 3 autres de mes tables ect...
    donc il faut vraiment que je traite au cas par cas pour affecter au plus grand nombre d'enregistrement un type jalon correct.

  2. #22
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Perl émet certes un warning, mais c'est une erreur d'écrire @a[2] cela quand on veut récupérer un scalaire.
    Désolé pour le hors sujet, mais je rebondis avec l'usage de "use diagnostics" qui est plus explicite en décrivant cette "erreur" comme une "bonne pratique" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Scalar value @a[1] better written as $a[1] at -e line 1 (#1)
        (W syntax) You've used an array slice (indicated by @) to select a
        single element of an array.  Generally it's better to ask for a scalar
        value (indicated by $).  The difference is that $foo[&bar] always
        behaves like a scalar, both when assigning to it and when evaluating its
        argument, while @foo[&bar] behaves like a list when you assign to it,
        and provides a list context to its subscript, which can do weird things
        if you're expecting only one subscript.
     
        On the other hand, if you were actually hoping to treat the array
        element as a list, you need to look into how references work, because
        Perl will not magically convert between scalars and lists for you.  See
        perlref.
    En effet, la plupart des usagers ne comprennent pas le mécanisme qui fait que "ça marche avec @", alors que @a[1] retourne une liste et non un scalaire (une liste qui en contexte scalaire, retourne le dernier élément, donc l'élément lui-même si la liste n'a qu'un élément).

    C'est d'ailleurs étrange cette manière d'utiliser @a[1] à la place de $a[1], alors que %a{toto} ne parait pas "naturel" et n'est tout bonnement pas syntaxiquement correct, l'équivalent étant plutôt @a{toto} (et qui génère le même type de warning).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #23
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Effectivement c'est étonnant cette capacité au code d'interprété correctement une syntaxe fausse.

    Mon prédécesseur à codé entièrement ses scripts Perl en utilisant les @variables d'où mon erreur. Je me suis basé sur ses scripts en guise d'exemple.
    Ouh pas bien !!

  4. #24
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par leilan Voir le message
    Effectivement c'est étonnant cette capacité au code d'interprété correctement une syntaxe fausse.
    Perl understands and does what you mean
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #25
    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 leilan Voir le message
    Juste une question, si je met pas ".*" au début et à la fin de ma régex, elle va essayée de trouver par exemple le mot "revue" en début de phrase alors qu'il peut être en plein milieu non ?
    Ou si j'ai compris. Si je veux avoir "Revue" en début de phrase je devrait mettre "^Revue" c'est ça??
    Si tu as la chaîne: "toto Revue toto" et que tu cherches le mot "Revue", il suffit d'utiliser la regex /Revue/, et le moteur de regex va chercher depuis le début de la phrase le mot Revue. Il va le trouver en plein milieu et affichera un succès de reconnaissance (et il ne cherchera dans ce cas pas plus loin). Effectivement, si tu veux "Revue" en début de phrase, il faut utiliser /^Revue/ et si tu le veux à la fin, il faut /Revue$/. Et /^Revue$/ reconnaîtra une chaîne de caractère ne contenant que le mot "Revue" et rien d'autre.

  6. #26
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merchiiii beaucoup ! Tout deviens nettement plus clair !!! =)


    J'ai réussi à écrire une régex et en plus à géré mes accents je vous remercie tous infiniment et passe cette discussion à résolu !

    Bonne continuation !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème avec un switch contenant des strings
    Par dessinateurttuyen dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2006, 12h56
  2. [Tableaux] Probleme avec les switch
    Par grumly22 dans le forum Langage
    Réponses: 9
    Dernier message: 10/04/2006, 10h51
  3. Probleme avec mon switch
    Par Fredovsky dans le forum C
    Réponses: 6
    Dernier message: 23/03/2006, 16h47
  4. [Système] Probleme avec un switch case!
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 29/01/2006, 16h28
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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