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 :

Coup de pouce sur expression reguliere


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut Coup de pouce sur expression reguliere
    Bonjour a tous,
    je coince sur l'expression regulier suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl
    use strict;
    my $type="enterprises.9.1.503";
    my $num_type;
     
    if (($num_type)=(($type)=~/\.(\d{3})/))
    {
    print $num_type;
    }
    Je souhaiterais afficher juste le chiffre 503 !!
    Merci d avance Jules

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Mais ... quel est le problème ???

    Chez moi, cela affiche 503 ...

    Je ne l'aurai pas codé ainsi, mais il y a toujours plus d'une façon de le faire

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    C'est normal je suis un boulet !!!!!! et je l asume toute mes excuses n ayant pas mis de suat de ligne j ai pas vu qu il collait a mon prompt ! toutes mes excuses ! Mais quelle serait ta methode je cherche toujours a apprendre et a penser differemment.
    Jules un newbee forever

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par calimero642
    ... Mais quelle serait ta methode je cherche toujours a apprendre et a penser differemment.
    Ma méthode dépendrait étroitement de la spécification du format de la chaine de version ...

    Par exemple, en supposant que le matricule à récupérer en est la partie terminale, que je n'en connait pas le nombre de chiffres et qu'il est séparé des autres numéros de versions par un "truc" qui n'est pas un chiffre, je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($num_type)=($type =~ /\D(\d+)$/))

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Merci c est nickel et ta solution est plus robuste en cas ou les chiffres sont different de 3 !!!
    Merci
    Jules

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    J'ai une autre question sur une expression réguliere, je voudrais placer dans la variable $bonne_ligne une ligne complete d'un fichier contenant { ciscoProducts 564 }:

    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
     
    #!/usr/bin/perl
    use strict;
    my $num_cisco;
    my $bonne_ligne;
    my $numero=564;
    my $Ligne_Fichier;
    open(Fichier_mib_cisco,"<CISCO-PRODUCTS-MIB.my") || die ("Vérifiez la présence du fichier resultat.txt ou son chemin à la ligne :\n $! ");
    while ($Ligne_Fichier = <Fichier_mib_cisco> )
    {
             if ( ($bonne_ligne)= (($Ligne_Fichier) =~/\{\sciscoProducts\s$numero\s\}/ ))
             {
                    print "\n$bonne_ligne";
             }
     
    }
    Voici la ligne complete
    catalyst356048PS OBJECT IDENTIFIER ::= { ciscoProducts 564 } -- Catalyst 3750 48 10/100 ports with In-Line Power + 4

    Merci d avacnce pour un coup de pouce.
    Jules[/code]

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Encore une fois, penser "spécification de format" ...

    Ta spécification, c'est "toute la ligne contenant { ciscoProducts 564 }".

    On peut le traduire par "tous les caractères, depuis le début, avec aussi une correspondance de { ciscoProducts 564 } et tous les caractères qui suivent, jusqu'à la fin.

    Ca donne : m/^(.*{ ciscoProducts 564 }.*)$/

    Et finalement, ça n'a aucun sens car s'il s'agit de récupérer une variable complète contenant ce motif, pourquoi procéder à une extraction mémorisante ... pourquoi ne pas faire une simple affectation de variable sur un succès de match ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bonne_ligne = $Ligne_Fichier if ( $Ligne_Fichier =~ m/\{\sciscoProducts\s$numero\s\}/ );
    Ca devrait pouvoir être marqué [Résolu], alors

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Merci pour ton coup de pouce mais pourquoi si j'incorpore une variable cela ne fonctionne plus ?
    Deuxieme question c'est que ta solution fonctionnait mais elle bouclais elle me sortait la reponse autant de fois qu il y a de ligne dans le fichier ? Pour quelle raison ?
    voici mon code

    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
     
    #!/usr/bin/perl
    use strict;
    my $num_cisco;
    my $bonne_ligne;
    my $numero="564";
    my $Ligne_Fichier;
    open(Fichier_mib_cisco,"<CISCO-PRODUCTS-MIB.my") || die ("Vérifiez la présence du fichier resultat.txt ou son chemin à la ligne :\n $! ");
    while ($Ligne_Fichier = <Fichier_mib_cisco>)
    {
    $bonne_ligne = $Ligne_Fichier if ( $Ligne_Fichier =~ m/^(.*{ ciscoProducts.$numero}.*)$/  );
            # if ( ($bonne_ligne)= (($Ligne_Fichier) =~/\{\sciscoProducts\s$numero\s\}/ ))
            # {
                    print "\n$bonne_ligne";
            #}
    }
    Merci d avance Jules

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    Euh excuses j etais pas assez precis,, j'ai incorporé une variable dans la regle que tu m a donné .
    Et la c est le drame !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Points : 78
    Points
    78
    Par défaut
    C est bon j ai trouve j avais place un espace dc il trouvais plus l expression c est reglé !!!
    Merci

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

Discussions similaires

  1. Coup de pouce sur forumulaires svp
    Par eyquem dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 16/09/2007, 20h32
  2. un tit coup de pouce sur une fermeture auto
    Par MORPHEUS50 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 26/04/2007, 07h19
  3. Aide sur expression Reguliere
    Par chaser_T dans le forum Langage
    Réponses: 2
    Dernier message: 09/10/2006, 15h19
  4. Coup de pouce sur la modélisation objet en PHP
    Par FMaz dans le forum Projets
    Réponses: 3
    Dernier message: 03/10/2006, 18h18
  5. un coup de pouce sur "LinkMasterFields"
    Par RGShoop dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 13h57

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