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 :

Probleme de script regex !!!


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 Probleme de script regex !!!
    Bonjour a tous,
    voila je vais essayer de vous expliquer ce que je souhaite faire:

    Voila mon programme
    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
     
     sub Fonct_Loca_Alim
                            {
                                    my $Cmd_Snmp_Type = "snmpwalk -v1 -On -c $Com_Snmp";
                                    my @Cmd_Snmp_Type_Oid  = `$Cmd_Snmp_Type $Addr_Ip .1.3.6.1.2.1.47.1.1.1.1.5`;
                                    my i=0;
                                    i=i++;
                                    if
                                    {
                                    print("$Cmd_Snmp_Type_Oid[i]");
                                    }
                                    #chomp($Cmd_Snmp_Type_Oid);
                                    #Enlève le dernier caractère de la chaîne
                                    #return @Cmd_Snmp_Type_Oid;
                                    #Permet de retourner une variable precise, évite d'avoir la variable par defaut
                                    #print("$Cmd_Snmp_Type_Oid[22]");
                            }
     
                            &Fonct_Loca_Alim

    Voila ce que me ressort la commande snmp

    • 47.1.1.1.1.5.1 = 3
      47.1.1.1.1.5.2 = 5
      47.1.1.1.1.5.3 = 5
      47.1.1.1.1.5.4 = 5
      47.1.1.1.1.5.5 = 4
      47.1.1.1.1.5.6 = 5
      47.1.1.1.1.5.7 = 7
      47.1.1.1.1.5.8 = 8
      47.1.1.1.1.5.9 = 5
      47.1.1.1.1.5.10 = 5
      47.1.1.1.1.5.11 = 6
      47.1.1.1.1.5.12 = 8
      47.1.1.1.1.5.13 = 8
      47.1.1.1.1.5.14 = 8


    Et je voudrais matcher les lignes qui valent 6 poue en extraire le dernier chiffre de OID correspondant !!
    exemple >>>47.1.1.1.1.5.11 = 6
    c est le 11 qui m interesse !!!
    Comment puis je faire ?
    Merci d avance Jules
    Merci d avance Jules

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ligne =~ / \.(\d+)\s+=\s+6$/
    $mon_chiffre = $1;

  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
    Merci mais je fais comment si il y a plusieurs lignes ! qui repondent a cette regex ?
    Merci jules

  4. #4
    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 mais J'ai essaye ca, mais ca ne matche pas !
    Attenttion j ai au moins deux lignes a matcher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       sub Fonct_Loca_Alim
                            {
                                    my $Cmd_Snmp_Type = "snmpwalk -v1 -On -c $Com_Snmp";
                                    my @Cmd_Snmp_Type_Oid  = `$Cmd_Snmp_Type $Addr_Ip .1.3.6.1.2.1.47.1.1.1.1.5`;
                                      my @Alim = $2   if (@Cmd_Snmp_Type_Oid  =~/ \.(\d+)\s+=\s+6$/);
     
                                    print("$Alim[0]");
                                    print("$Alim[1]");
     
     
                            }
    Mais ca marche pas sniffsnifff !!!

    Merci d'avance Jules

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @Alim = $2   if (@Cmd_Snmp_Type_Oid  =~/ \.(\d+)\s+=\s+6$/);
    c'est pas bien ecrit tout ça .
    moi je ferais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $ligne (@Cmd_Snmp_Type_Oid) {
    $ligne =~/ \.(\d+)\s+=\s+6$/);
    push (@Alim, $1) if($1);
    }

  6. #6
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    pourquoi $2 alors qu'on ne voit qu'un seul jeu de parenthèses ?!?

  7. #7
    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
    Ben c est parceque j ai une autre regex audessu avec des parentheses ! Donc je suis passé en $2 !

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    non Mr6 a raison, dans ta regex, c'est $1 et non $2. si t'as une autre regex, bah les compteurs seront remis à zero (c'est à dire $1, $2, etc).
    Cours sur les regex, confere FAQ.

  9. #9
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    grillé par djibril

  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
    Merci je comprends mieux maintenant pour l'histoire des $1. etc;

    Mais mon code ne matche pas le "11" de la ligne !!! que je souhaite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     sub Fonct_Loca_Alim
                            {      
                                    my $Cmd_Snmp_Type_Oid ='47.1.1.1.1.5.11 = 6';
                                    my @Alim;
                                    foreach my $ligne ($Cmd_Snmp_Type_Oid)
                                    {
                                             $1 = $ligne =~/\.(\d+)\s+=\s+6$/);
                                             push (@Alim, $1);
                                             print("@Alim[1]");
                                    }
                             }
     
                            &Fonct_Loca_Alim
    J ai meme une erreur sur la regex "un styl de syntax error";

    Merci d avance pour le coup de pouce.
    Jules

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Mr6
    grillé par djibril
    8) 8)

  12. #12
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	foreach my $ligne ($Cmd_Snmp_Type_Oid) {
    		push (@Alim, $1) if $ligne =~/\.(\d+)\s+=\s+6$/;
    		print("@Alim[0]");
    	}
    edit :

    ou....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	foreach ($Cmd_Snmp_Type_Oid) {
    		push (@Alim, $1) if /\.(\d+)\s+=\s+6$/;
    		print("@Alim[0]");
    	}

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par calimero642
    Merci je comprends mieux maintenant pour l'histoire des $1. etc;

    Mais mon code ne matche pas le "11" de la ligne !!! que je souhaite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     sub Fonct_Loca_Alim
                            {      
                                    my $Cmd_Snmp_Type_Oid ='47.1.1.1.1.5.11 = 6';
                                    my @Alim;
                                    foreach my $ligne ($Cmd_Snmp_Type_Oid)
                                    {
                                             $1 = $ligne =~/\.(\d+)\s+=\s+6$/;
                                             push (@Alim, $1);
                                             print("@Alim[1]");
                                    }
                             }
     
                            &Fonct_Loca_Alim
    J ai meme une erreur sur la regex "un styl de syntax error";

    Merci d avance pour le coup de pouce.
    Jules
    Tu te melange les pedales dans ton ecriture.
    soit tu ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     sub Fonct_Loca_Alim
                            {      
                                    my $Cmd_Snmp_Type_Oid ='47.1.1.1.1.5.11 = 6';
                                    my @Alim;
                                    foreach my $ligne ($Cmd_Snmp_Type_Oid)
                                    {
                                             $toto = $ligne =~/\.(\d+)\s+=\s+6$/;
                                             push (@Alim, $toto);
                                             print $Alim[0];
                                    }
                             }
     
                            &Fonct_Loca_Alim
    et dans $toto t'aura la valeur de $1.
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     sub Fonct_Loca_Alim
                            {      
                                    my $Cmd_Snmp_Type_Oid ='47.1.1.1.1.5.11 = 6';
                                    my @Alim;
                                    foreach my $ligne ($Cmd_Snmp_Type_Oid)
                                    {
                                             ligne =~/\.(\d+)\s+=\s+6$/;
                                             push (@Alim, $1);
                                             print $Alim[0];
                                    }
                             }
     
                            &Fonct_Loca_Alim
    Et fais attention avec l'ecriture des cases de tableau. c'est $tableau[0] et non @tableau[0].
    Relis les cours de perl de david et le FAQ ecrite par nos soins.
    Ca te permettra de mieux comprendre et moins perdre de temps à rechercher tes erreurs.

  14. #14
    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
    Oki merci pour le coup de main tres utile d ailleurs,

    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;
    sub Fonct_Loca_Alim
                            {
                                    my $Cmd_Snmp_Type_Oid ='47.1.1.1.1.5.11 = 6';
                                    my @Alim;
                                    foreach my $ligne ($Cmd_Snmp_Type_Oid)
                                    {
                                            my $toto = $ligne =~/\.(\d+)\s+=\s+6$/);
                                             push (@Alim, $toto);
                                             print $Alim[0];
                                    }
                             }
     
                            &Fonct_Loca_Alim
    Mais j ai une erreur que je ne comprends pas !!!

    syntax error at ./essai.pl line 9, near "/\.(\d+)\s+=\s+6$/)"
    Execution of ./essai.pl aborted due to compilation errors.


    Merci d avance Jules

  15. #15
    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 c etaiots une parenthese qui manquait !
    merci je vais tester now !!
    Jules

  16. #16
    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
    Oki ca fonctionne bien lorsque je n'ai qu une variable qui peut etre matchée mais si j en ai plus, ca merde !


    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
     
     my $Alim1;
                    my $Alim2;
                    sub Fonct_Loca_Alim
                            {       #print("ok\n");
                                    my $Cmd_Snmp_Type = "snmpwalk -v1 -On -c $Com_Snmp";
                                    my @Cmd_Snmp_Type_Oid  = `$Cmd_Snmp_Type $Addr_Ip .1.3.6.1.2.1.47.1.1.1.1.5`;
                                    #chomp($Cmd_Snmp_Type_Oid);
                                    #return @Cmd_Snmp_Type_Oid;
                                    my @Alim;
                                    foreach my $ligne (@Cmd_Snmp_Type_Oid)
                                    {
                                            $ligne =~(/\.(\d+)\s+=\s+6$/);
                                             push (@Alim, $1);
                                    #         print "Alimentation 1: $Alim[0]" ;
                                    #        print "Alimentation 2: $Alim[1]" ;
                                  return $Alim1=$Alim[0];
                                  return $Alim2=$Alim[1];
                                    }
                             }
                     &Fonct_Loca_Alim;
                    print"$Alim1 et $Alim2";
    Il ne me renvoie rien mais je suis presque sur que ca vient de la ligne:

    foreach my $ligne (@Cmd_Snmp_Type_Oid)
    Est ce que j ai le droit de lui passer un tableau qui devrait contenir:




    47.1.1.1.1.5.1 = 3
    47.1.1.1.1.5.2 = 5
    47.1.1.1.1.5.3 = 5
    47.1.1.1.1.5.4 = 5
    47.1.1.1.1.5.5 = 4
    47.1.1.1.1.5.6 = 5
    47.1.1.1.1.5.7 = 7
    47.1.1.1.1.5.8 = 8
    47.1.1.1.1.5.9 = 5
    47.1.1.1.1.5.10 = 5
    47.1.1.1.1.5.11 = 6
    47.1.1.1.1.5.12 = 8



    Merci d avance Jules

  17. #17
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    fais plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
         return @Alim;
    }
    my @ret_alim = Fonct_Loca_Alim;
    print "@ret_alim";

  18. #18
    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
    En faite la variable censée changer de valeur $ligne prend la premiere ligne et c est tout. Elle ne change pas !!!
    Comment je peux faire ?
    Merci Jules

  19. #19
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Lorsque tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$Cmd_Snmp_Type_Oid[0]\n";
    tu obtiens quoi ? la 1ère ligne de résultat ou tous les résultats ?

  20. #20
    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
    Il me donne ce que je pensais c est a dire la premiere ligne du tableau:

    .1.3.6.1.2.1.47.1.1.1.1.5.1 = 3



    Le tableau contenu dans
    @Cmd_Snmp_Type_Oid =
    47.1.1.1.1.5.1 = 3
    47.1.1.1.1.5.2 = 5
    47.1.1.1.1.5.3 = 5
    47.1.1.1.1.5.4 = 5
    47.1.1.1.1.5.5 = 4
    47.1.1.1.1.5.6 = 5
    47.1.1.1.1.5.7 = 7
    47.1.1.1.1.5.8 = 8
    47.1.1.1.1.5.9 = 5
    47.1.1.1.1.5.10 = 5
    47.1.1.1.1.5.11 = 6
    47.1.1.1.1.5.12 = 8


    Merci d avance Jules

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de script
    Par HacHHacH dans le forum Linux
    Réponses: 2
    Dernier message: 05/04/2006, 20h46
  2. probleme de script pour trier dynamiquement un tableau
    Par K_!!! dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/02/2006, 16h46
  3. Probleme de script...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/01/2006, 22h31
  4. Problem avec un REGEX
    Par Death83 dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 22h36
  5. probleme avec script perl grab_tv_fr.pl
    Par ZiMo dans le forum Langage
    Réponses: 6
    Dernier message: 30/11/2005, 17h12

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