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 :

Problème avec une expression régulière


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut Problème avec une expression régulière
    Salut, je suis débutant en Perl et je rencontre un soucis au niveau d'une expression régulière, si qqun peut m'aider, merci d'avance . . .

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $cpuline = `top -n1 | grep Cpu`;
    # => ceci met "Cpu(s):  6.4%us,  0.4%sy,  0.0%ni, 83.1%id, 10.1%wa,  0.0%hi,  0.1%si,  0.0%st" dans $cpuline
     
    if($cpuline =~ /(\d{1,2})(\.)(\d)(\%)(us)/xi)
    {
            print "$1  $2  $3  $4  $5";       # => me permet seulement de tester si ça marche ou pas
            print "\nOK\n";
    }
    Là mon expression régulière ne fonctionne pas . . . comme s'il trouvait pas ce que je cherche : un simple pourcentage

    J'ai remarqué par contre que si je met ma cpuline en dur , au lieu de la prendre dynamiquement avec un top . . . il trouve bien mon 6.4%us . . .

    Je pige pas . . .

    Ah oui, ça me fait la même chose avec ma ligne mémoire . . .

  2. #2
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    personnellement, je l'aurais plus écrit comme ça (les options x et i ne servent à rien ici d'ailleurs):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($cpuline =~ m/^Cpu\(s\):\s*(\d+\.\d+\%us)/)
    {
            print "$1\n";       # => me permet seulement de tester si ça marche ou pas
            print "\nOK\n";
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut
    oui ça marche . . . si je mets la ligne Cpu en dur pour tester l'expression régulière . . . mais pas si je la récupère depuis un top . . .

  4. #4
    Membre expérimenté Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    t'as essayé de regarder si le top ne te renvoie pas par hasard des caractères de contrôle comme séparateur dans ta variable ?
    genre \t ou autre ?

  5. #5
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Citation Envoyé par Darkroro
    oui ça marche . . . si je mets la ligne Cpu en dur pour tester l'expression régulière . . . mais pas si je la récupère depuis un top . . .
    Essaie de faire un chomp sur la variable cpuline après l'avoir récupérée, juste pour voir !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $cpuline = `top -n1 | grep Cpu`;
    chomp($cpuline);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut
    ça y est ça marche . . . enfin . . . plus ou moins . . . j'ai viré le "us" et là tout fonctionne . . .

    petit question now :

    mon expression régulière c'est /(\d{1,2}\.\d\%)/

    comment je fait pour récupérer tous les pourcentage de ma "cpuline" sans devoir répéter 7 fois la recherche ?

  7. #7
    Membre expérimenté Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    essaye

    my @prct = ($cpuline =~ m/(\d{1,2}\.\d\%)/g);

Discussions similaires

  1. problème avec une expression régulière
    Par Jasmine80 dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2009, 11h53
  2. Réponses: 0
    Dernier message: 28/04/2009, 09h00
  3. [c# REGEX]Problème avec une expression régulière
    Par mezzo_998 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/11/2007, 13h03
  4. Problème avec une expression régulière ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 1
    Dernier message: 28/04/2007, 18h50
  5. [RegEx] problème avec une expression régulière
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h12

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