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 :

Recherche de fichier


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut Recherche de fichier
    Bonjour à tous,

    Je voudrai savoir si vous connaissez un module ou une technique permettant de faire la recherche d'un fichier bien particulier.

    j'avais trouvé ca mais ca me fait des erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl -w
     
    use File::Searcher;
     
    my @search = File::Searcher->new('blabla.js');
    foreach $test (@search)
    {
    print "$test";
    }
    J'ai également un petit soucy pour l'ouverture de fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $file = $ARGV[0];
    if (@ARGV < 1) {
    print "\n\n #############HOW TO USE#######\n\n";
    print " utilisation test.pl [path blabla.js] ";
    }
    else {
    open (MOZ,"$file") or die "Erreur MOZ";
    print "chemin fichier blabla.js ?\n\n";
    }
    close(MOZ);
    Si la personne entre c:\bla\blabla.js, cela va t-il marcher ?

    Merci pour vos réponses

  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
    juste une petite erreur, le close est en dehors du test, il sera appelé quelque soit la condition, même si le fichier n'est pas ouvert... ce n'est pas très propre !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    merci pour la réponse mais je n'arrive toujours pas à ouvrir un fichier avec un path défini en argument

    Si une personne veut bien me venir en aide

    Merci bcp

    EDIT :

    Ah c'est bon il fallait mettre un deuxième backslash :

    Par contre si vous avez une astuce afin que l'user n'est pas a entrer c:\\test.txt mais juste un c:\test.txt

    Egalement, le script de recherche n'est pas fonctionnel, avez vous deja fait des script permettant la recherche de fichiers ?

    Merci =)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    pour l'utilisateur ca depend de son interface de saisie, mais à priori il n'aura pas besoin d'en mettre deux.
    Mais pour resoudre ton probleme le mieux est de mettre des "/" au lieu de "\", et ca marche sans prob

  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 Nickname
    Egalement, le script de recherche n'est pas fonctionnel, avez vous deja fait des script permettant la recherche de fichiers ?

    Merci =)
    Effectivement, il faut soit mettre un double "\\" soit mettre un simple "/", ce qui est plus pratique ^^

    J'ai déjà mis en place des scripts de recherche de fichiers dans d'autres langages, le principe est assez simple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    On part d'un répertoire A. 
    On liste les fichiers correspondant au nom (grâce à la méthode glob('c:/repertoire/*.extension') par exemple)
    On liste les sous-répertoires
    Pour chaque sous-répertoire, on recommence la recherche

  6. #6
    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
    As-tu vraiment besoin de File::Searcher ? C'est un module qui n'est pas vraiment fait uniquement pour chercher des fichiers.
    Normalement on utilise File::Find, qui est un module du CORE (dans la distribution de base de Perl).

    --
    Jedaï

  7. #7
    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
    Et la documentation du module qui va avec ^^

    http://search.cpan.org/~nwclark/perl...b/File/Find.pm

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Merci a vous c'est très sympa pour votre aide
    Ca permet réellement de bien me faire avancé dans le perl =)

    Au risque de paraitre embetant lol je vous demande encore une petite aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use File::Find;
        find(\&wanted, @directories_to_search);
        sub wanted { ... }
    donc notre @directories_to_search, si je met *.* va t-il le prendre en compte ? ou juste mettre c:/ suffirai ?

    Egalement, la sub que je n'ai pas trop comprise :

    L'exemple du CPAN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        sub wanted {
            /^\.nfs.*\z/s &&
            (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_)) &&
            int(-M _) > 7 &&
            unlink($_)
            ||
            ($nlink || (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_))) &&
            $dev < 0 &&
            ($File::Find::prune = 1);
        }
    Assez abstrait pour moi

  9. #9
    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
    "." signifie le répertoire courant et tu peux tout à fait le mettre dans les répertoires où chercher.

    Par ailleurs &wanted est juste une fonction qui reçoit en argument le nom du fichier dont on veut savoir s'il faut le retenir ou non dans le résultat, il doit renvoyer une valeur vraie s'il faut le retenir.

    L'"exemple" du CPAN est incompréhensible mais c'est tout à fait normal car il s'agit d'une traduction automatique d'une commande "find" (utilitaire Linux en ligne de commande qui sert à trouver des fichiers, tout à fait comme File::Find), consulte la page de manuel de find si tu veux comprendre ce que fait la commande, ce sera plus facile que déchiffrer la fonction...

    --
    Jedaï

  10. #10
    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
    N'utilise surtout pas cette méthode wanted en l'état, elle supprime tous les fichiers recherchés !!! (appel à la méthode unlink)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    oh que c'est compliqué !

    Je vais regarder ca de plus prêt

    Merci a vous deux pour votre aide =)

    Si une personne a deja fait un script de recherche merci de le poster afin que je puisse m'en inspirer.
    Je vais essayer de bien comprendre le principe de ce module, sinon je le ferai a la main (ptetre plus simple ?) avec l'algo de MarneusCalgarXP.

    ++ ALL ++

  12. #12
    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 MarneusCalgarXP
    N'utilise surtout pas cette méthode wanted en l'état, elle supprime tous les fichiers recherchés !!! (appel à la méthode unlink)
    Oui enfin encore faut-il qu'il ait des fichiers se terminant par .nfs* vieux de plus de 7 jours... Les risques sont finalement assez minimes !

    En fait je me suis trompé (je n'avais pas utilisé File::Find depuis longtemps...), la fonction &wanted est simplement appelée sur tous les fichiers que rencontre File::Find, sa valeur de retour n'a aucune importance.

    Un exemple simple :
    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
     
    #! /usr/bin/perl
     
    use strict;
     
    use File::Find;
     
    # traite les fichiers dans le répertoire courant et dans "Program Files"
    # ainsi que dans leur sous-répertoires récursivement
    finddepth(\&blabla_handling, ".", "C:/Program Files");
     
    sub blabla_handling {
      if( $_ eq "blabla.js" ) {
        # traitement de blabla.js
        # exemple : affiche le répertoire dans lequel blabla.js se trouve
        print "blabla.js est dans :", $File::Find::dir, "\n";
      }
      elsif( m/\.js \z/x ){
        # traitement générique pour tous les .js (sauf blabla.js)
      }
    }
    Le code ci-dessus ne te semble-t-il pas beaucoup plus simple que si tu devais parcourir récursivement tous ces dossiers toi-même ?

    --
    Jedaï

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    ouah nikel !
    Toujours la avec une solution ce Jedai

    Serieux tu assures ! et ca fait plaisir à chaque fois pour tes post
    Merci bcp MarneusCalgarXP egalement

    Je post le programme des qu'on l'aura fini =)

    Passez une agréable journée

    ^_^ Nicky ^_^

  14. #14
    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 Jedai
    Oui enfin encore faut-il qu'il ait des fichiers se terminant par .nfs* vieux de plus de 7 jours... Les risques sont finalement assez minimes !
    Effectivement, je me suis focalisé sur la méthode unlink, sans réfléchir à ce que voulait dire le int(-M _)

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Avec la methode de Jedai, j'ai fait ce 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
    23
    24
     
    #!/usr/bin/perl -w
     
    use strict;
    use File::Find;
     
    finddepth(\&test, ".", "C:/");
     
    sub test {
      if( $_ eq "blabla.js" ) {
     
        open (FILE, ">>$File::Find::dir"); 
     
        while(<FILE>) { # j'ai essayer avec un foreach
     
        print $_; #j'ai essayer avec print FILE;
     
    }
     
      }
      elsif( m/\.js \z/x ){
     
      }
    }
    Mais ca n'a pas l'air de marcher

    Auriez-vous une idée ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Par défaut
    eu j'ai pas tout suivit mais je pense que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FILE, ">>$File::Find::dir");
    deevrais s'écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FILE, ">>File::Find::dir");

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    euh je ne pense pas etant donnée que lors du code de Jedai il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    print "blabla.js est dans :", $File::Find::dir, "\n";
    Cette variable $File::Find::dir m'indique bien le path du fichier (pas complet d'ailleur vu qu'il manque ... /blabla.js)

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Par défaut
    Bon je propose:

    essaye de faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $line=<FILE>
    while($line) { # j'ai essayer avec un foreach
     
        print $line; #j'ai essayer avec print FILE;
     
    $line=<FILE> 
     
    }

    je garanti rien mais il m'est arriver la même erreur ya pas longtemps et ca a marcher comme ca

  19. #19
    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
    Normal, tu te places, d'une part en mode écriture avancée ou append (">>" dans ton open) au lieu du mode read, mais de plus tu ouvres le répertoire et non le fichier !!!

    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
    #!/usr/bin/perl -w
    
    use strict;
    use File::Find;
    
    finddepth(\&test, ".", "C:/");
    
    sub test {
      if( $_ eq "blabla.js" ) {
    
        open (FILE, "${File::Find::dir}/$_"); 
    
        while(<FILE>) { 
            print $_; #j'ai essayer avec print FILE;
        }
    
        close(FILE);
    
      }
        
    }

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    ah oki, ca mrche nikel !

    Est -il possible de laisser en mode write afin de faire une expression régulière sur une phrase dans le fichier afin de modifier le contenu ?

    Merci =)

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

Discussions similaires

  1. [Système][fichier] recherche de fichier dans tout le disque dur
    Par helonear dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 15/12/2010, 10h43
  2. Recherche dans fichiers
    Par Tchinkatchuk dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2005, 10h32
  3. Réponses: 14
    Dernier message: 25/10/2004, 21h33
  4. batch de recherche de fichier ...
    Par Félia dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2004, 15h54
  5. Recherche support fichier
    Par sydiop dans le forum Informix
    Réponses: 5
    Dernier message: 18/03/2004, 10h15

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