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 :

Comment faire plus simple


Sujet :

Langage Perl

  1. #1
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut Comment faire plus simple
    Bonjour je bosse un script qui scanne un disque dur et en ressort les chemins e divers type de fichiers , mais j'ai un probléme depuis que j'ai ajouté cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $path !~ s/(.*)(pdf|doc|rtf|xls|txt|png|gif|bmp|mp3)$//gi;
    le " scanner " a pas mal ralentit.

    J'ai entendue parlé de Regexp::Assemble pour optimiser les regxp seulement j'arrive pas a l'utiliser dans ma situation .

    ma question est donc simple comment optimiser tout cela ?
    Everybody have in their the potential to be their own god : Marilyn Manson

  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
    Quel est exactement ton but ? Vider $path lorsqu'il finit par pdf ou doc ou ... ?
    Est-ce vraiment une substitution dont tu as besoin, si oui, ce code fera aussi bien l'affaire, et plus rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $path = "" if $path =~ m/(?:pdf|doc|rtf|xls|txt|png|gif|bmp|mp3)$/io;
    Mais est-ce vraiment ce que tu veux faire ?

    --
    Jedaï

  3. #3
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut
    Ben en fait $path contient le chemin de chaque fichier trouver , et je voudrais garder que les fichiers dont l'extension est :

    pdf
    doc
    rtf
    xls
    txt
    png
    gif
    bmp
    mp3
    J'ai un peu fouiller le forum et j'ai trouvé ce script


    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
    use Regexp::Assemble; 
    { # scope pour rendre $re 'statique' 
      my $re;
      sub allow
       {
        if( not $re ) { 
            my $r = Regexp::Assemble->new;
            $r->add( "\\.$_\$" ) for 
                qw/ pdf doc rtf xls txt png gif bmp mp3 /; 
            $re = $r->re; 
        } 
     
        return grep { /$re/ } @_;
      } 
    }
    Mais sa marche pas !
    pourtant j'ai fait @lyze = $path; puis @lyze=allow(@lyze);

    pour info j'utilise activeperl 5.8.7.813
    Everybody have in their the potential to be their own god : Marilyn Manson

  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
    Mais montre donc le contenu de $path ! C'est un tableau ? Une chaîne où les fichiers sont séparés par des virgules ou autre séparateurs ?
    Montre un peu le reste du code.

    --
    Jedaï

  5. #5
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    C'est probablement le (.*) qui ralentit.
    Tu peux aussi utiliser simplement substring dans ce cas probablement, il faudrait voir le reste du code pour être sur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Ata , si tu fait @?? = $path; sa veut dire que $path est une variable qui a plusieur valeur en clair dans ton script il y a un moment ou tu fait

    print "$path\n";

    je me trompe ?

    Le script que que a trouvé est très bien mais il faudrais l'adapter en contexte scalaire ou bien ne plus en faire un prgramme pour l'incrusté dans ton programme

    le (.*) prend trop de temps

Discussions similaires

  1. Comment faire plus simple ?
    Par the_lord_sith dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 04/04/2013, 09h20
  2. [Débutant] Dictionary global : comment faire plus simple ?
    Par TheYggdrazil dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/03/2012, 15h37
  3. Procédure stockée : comment faire plus simple / plus fiable ?
    Par allaume dans le forum Accès aux données
    Réponses: 1
    Dernier message: 08/08/2007, 12h17
  4. [C#] Impression GDI+, OK mais comment faire plus simple ?
    Par yo2105 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/12/2006, 20h29
  5. Comment faire plus simple
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2006, 22h56

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