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 :

Galère avec une regexp


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Par défaut Galère avec une regexp
    Bonsoir à tous (me revoilà ) ,

    Bon, je galère totalement avec les regexpr de perl, comme tout noob qui se respecte
    Bref, voilà comment je faisais pour chopper juste ça (exemple) :

    2255.8 kbit/s
    De la commande :

    bitrate.py -o 0.1 -t 700 -f 25 41:01
    Qui donne ça lorsqu'elle est lancée dans le shell :

    Length: 2461 seconds (61525 frames @ 25.0 fps)
    Other: 37.55 MB @ 128.0 kbit/s
    Target: 700 MB => 662.4 MB @ 2255.8 kbit/s
    Voilà le 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
    17
    18
    19
    20
    21
    22
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    my (@p_d_b_1); # Oulala le nom du tableau :( - A CHANGER !
    open(BITRATE_700, "bitrate.py -o 0.1 -t 700 -f 25 41:01 |") or print "CRIT : Problème ! : $!\n" and die;
    while ( <BITRATE_700> ) {
    	push( @p_d_b_1, $_ );
    }
    close BITRATE_700;
     
    #print "@p_d_b_1\n";
     
    my (@display_b_1);
    for( @p_d_b_1) {
    	if ( m/^.*Target:/ ){
    	chomp;
    	@display_b_1 = split (/@/);
    }
    }
     
    print "$display_b_1[1]\n";
    Et donc ça va faire bien 3 heures que je "joue" avec les regexpr pour qu'il me sorte que ce qui est en gras plus haut (2255.8)

    Une petite aide serait la bienvenue

    Jjeje007

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    J'ai l'impression que tu as cherché, je vais donc te donner direct la réponse, mais essaie de comprendre comment elle marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/perl
    use strict; use warnings;
    use IO::Pipe;
    my $pipe = new IO::Pipe();
    $pipe->reader("bitrate.py -o 0.1 -t 700 -f 25 41:01");
     
    while( <$pipe> ) {
      if( m/Target.*\@\s*([\d\.]+)/ ) {
        print "$1\n";
        last;
      }
    }
    __END__
    (Un bouquin super sur les Regexp c'est le Friedl chez O'Reilly, si t'as les moyens (le mieux c'est de le prendre en anglais si tu en es capable, parce que la version française a une version de retard, mais bon, ça reste très exploitable !))

    --
    Jedaï

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Par défaut
    Salut,

    Merci pour ton aide Jedai, je suppose que je peux me passer du "IO:ipe" et faire ça avec open (étant donné que le but est non seulement de l'affiché mais aussi de le réutiliser plus tard )

    Pour ce qui est du livre, je n'ai pas de problème avec de l'anglais courant, mais si ça commence a partir en terme technique ....

    Jjeje007

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Jjeje007
    Salut,

    Merci pour ton aide Jedai, je suppose que je peux me passer du "IO:: Pipe" et faire ça avec open (étant donné que le but est non seulement de l'affiché mais aussi de le réutiliser plus tard )
    Je ne vois pas pourquoi tu utiliserais open(), le seul truc à changer si tu veux conserver le résultat, c'est la ligne du print :
    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; use warnings;
    use IO::Pipe;
    my $pipe = new IO::Pipe();
    $pipe->reader("bitrate.py -o 0.1 -t 700 -f 25 41:01");
     
    my $bitrate;
    while( <$pipe> ) {
      if( m/Target.*\@\s*([\d\.]+)/ ) {
        $bitrate = $1;
      }
    }
    $pipe->close();
     
    print $bitrate;
    __END__
    --
    Jedaï

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Par défaut
    Ok, ou comme ça aussi non ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my $bitrate;
     
    open(BITRATE_700, "bitrate.py -o 0.1 -t 700 -f 25 41:01 |") or print "CRIT : Problème ! : $!\n" and die;
    while ( <BITRATE_700> ) {
    	$bitrate = $1 if $_ =~ m/Target.*\@\s*([\d\.]+)/;
    }
    close BITRATE_700;
     
    print "le bitrate est $bitrate\n";


    Jjeje007

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

Discussions similaires

  1. Petit problème avec une regexp
    Par Beleg dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 25/02/2008, 17h46
  2. Problème de performance avec une regexp
    Par NicoV dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 21/02/2008, 18h46
  3. [RegEx] Filtrer une requête avec une regexp
    Par _kal_ dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2007, 12h05
  4. separation numero et signe avec une regexp
    Par black_code dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2006, 10h09
  5. [RegEx] [RegExp] Problème avec une REGEXP
    Par alex.hitman dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 20h11

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