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 de regexp


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 26
    Points
    26
    Par défaut Probléme de regexp
    Bonjour,

    Je me prend la tête depuis un petit moment sur une regexp qui ne veut pas fonctionner, je veux récupérer toutes les chaines commençant par "TotoLog" suivi d'une chaine de 11 caractére (chiffres et "_") et de l'extension ".gz";
    ex: "TotoLog_20070411_1.gz"

    j'ai procédé comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(<DIR> =~ /^TotoLog[0-9_]{11}\.gz/){
    }
    mais seul les fichiers se terminant par "titi.gz" s'affichent
    ex: "TotoLog_20070411_1.titi.gz"

    Grand merci à ceux qui peuvent un peu m'aider!

  2. #2
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par moook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(<DIR> =~ /^TotoLog[0-9_]{11}\.gz/){
    }
    Syntaxe douteuse... tu veux sûrement dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( my $filename = readdir(DIR) ) {
      if($filename =~ /^TotoLog[0-9_]{11}\.gz/){
        # traitement
      }
    }
    A moins qu'il ne nous manque beaucoup de contexte...

    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Salut Jedai et merci de ta réponse,

    Il manque peut être un peu de contexte en effet, je liste le contenu de mes répertoires avec un ls directement à partir de la connexion SSH.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    open(DIR,"ssh user\@host.net ls /path/*/*/|");
    while(<DIR>){
            if(<DIR> =~ /^TotoLog[0-9_]{11}\.gz/){#/^TotoLog_[0-9_]{10}\.gz/) {
                    my $file = <DIR>;
            }
    }

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par moook
    Salut Jedai et merci de ta réponse,

    Il manque peut être un peu de contexte en effet, je liste le contenu de mes répertoires avec un ls directement à partir de la connexion SSH.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    open(DIR,"ssh user\@host.net ls /path/*/*/|");
    while(<DIR>){
            if(<DIR> =~ /^TotoLog[0-9_]{11}\.gz/){#/^TotoLog_[0-9_]{10}\.gz/) {
                    my $file = <DIR>;
            }
    }
    Le <DIR> dans le if est tout de même une erreur... A chaque fois que tu écris <DIR> tu fais une lecture, donc là tu fais trois lecture par itération et tu n'en teste qu'une seule, en plus tu ne retiens même pas ce que tu as lu et testé. Il faut faire une seule lecture par itération et stocker le résultat pour les tests et manipulations suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open my($dir_content), '-|', 'ssh user@host.net ls /path/*/*/'
        or die "Can't open pipe from ssh : $!\n";
     
    while( my $filename = <$dir_content> ) {
        if( $filename =~ m/^TotoLog[0-9_]{11}\.gz/ ) {
            # traitement
        }
    }
    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    C'est ok,
    merci de ton aide ;-)

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

Discussions similaires

  1. Problème avec regexp
    Par Eye4eye dans le forum Général Python
    Réponses: 5
    Dernier message: 13/05/2008, 10h32
  2. URL Rewriting problème de regexp ?
    Par pierrickg dans le forum Apache
    Réponses: 2
    Dernier message: 10/07/2007, 13h35
  3. Un petit problème de regExp
    Par guidav dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 17h36
  4. Problème de regexp
    Par vodevil dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2006, 21h28
  5. Gros problème avec regexp
    Par dmbsys dans le forum ASP
    Réponses: 6
    Dernier message: 29/04/2006, 16h23

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