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 :

[PERL] un grep qui ne fonctionne pas bien


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [PERL] un grep qui ne fonctionne pas bien
    Bonjour à tous !

    Je tente de récupérer une liste de fichier dans un répertoire à l'aide de grep.
    Mes contraintes sont les suivantes:

    - fichier différent de . et ..
    - fichier a été modifié il y a moins de 2 jours
    - le fichier est un fichier (pas un répertoire)

    J'ai donc le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(@Repertoire_archives_IDOC)
    {
    opendir(REP,"$base_archives_IDOC$_") || die "erreur ouverture $repertoire_archives_IDOC $! \n";
     
    @{$tab2{$_}}=grep{$_ ne '..' and $_ ne '.' and -M $base_archives_IDOC.$_ < 2 and -e $base_archives_IDOC.$_} readdir REP;
    closedir REP;
    }
    Mais je ne récupère rien ??
    Y a t'il un problème avec mon grep ????

    Merci pour vos réponses.
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre du Club Avatar de oursblanc
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 58
    Points
    58
    Par défaut avec perl
    Salut,
    Je suppose que si tu fais un grep c'est que tu es sous Unix (ou Linux).
    Je tente de récupérer une liste de fichier dans un répertoire à l'aide de grep.
    Pour les contraintes - fichier différent de . et .. et - le fichier est un fichier (pas un répertoire), tu peux utiliser des Handle de répertoires (Voir les FAQ ) du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $nbrep = 0; 
    $nbfic = 0; 
    $dossier = "/home/gldavid/perl"; 
    opendir DIR, $dossier or die "$dossier n'existe pas !"; 
    @files = readdir DIR; 
    foreach $fichier (@files) { 
    if (-f $fichier) { $nbfic++; } 
    elsif (-d $fichier) { $nbrep++; } 
    } 
    close DIR; 
    print "Il y a $nbfic fichier(s) et $nbrep répertoire(s) dans $dossier.\n";
    Pour la contrainte de date, je crois qu'il existe aussi une commande perl.

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    les balises codes oursblanc

  4. #4
    Membre du Club Avatar de goblin
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 53
    Points
    53
    Par défaut Re: avec perl
    Citation Envoyé par oursblanc
    Salut,
    Je suppose que si tu fais un grep c'est que tu es sous Unix (ou Linux).
    Je tente de récupérer une liste de fichier dans un répertoire à l'aide de grep.
    Pour les contraintes - fichier différent de . et .. et - le fichier est un fichier (pas un répertoire), tu peux utiliser des Handle de répertoires (Voir les FAQ ) du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $nbrep = 0; 
    $nbfic = 0; 
    $dossier = "/home/gldavid/perl"; 
    opendir DIR, $dossier or die "$dossier n'existe pas !"; 
    @files = readdir DIR; 
    foreach $fichier (@files) { 
    if (-f $fichier) { $nbfic++; } 
    elsif (-d $fichier) { $nbrep++; } 
    } 
    close DIR; 
    print "Il y a $nbfic fichier(s) et $nbrep répertoire(s) dans $dossier.\n";
    Pour la contrainte de date, je crois qu'il existe aussi une commande perl.
    Pourquoi il devrait etre sous Unix ou Linux, sa marche pas sous Windows ?

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    normalement si

  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Bonjour,

    La commande grep est une fonction interne à Perl et qui n'a que peu de choses à voir avec la commande *n*x du même nom. Elle est disponible sur TOUTES les plates-formes supportant Perl.

    Pour plus de détails sur grep, elle est évoquée dans la FAQ

    Pour ce qui est du problème évoqué ici sur le grep, je crois que le Posteur Original gagnerait à parenthèser son expression dans le grep, à vérifier son répertoire de base du fichier, et à utiliser l'opérateur -f, plutôt que -e, pour tester si sa cible est un fichier et non un répertoire.

    J'en veux pour preuve ce code pleinement fonctionnel :
    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
    #!/usr/bin/perl
     
    use warnings;
    use strict;
     
    my @rep = ("/var/spool", "/var/log");
    my %hash;
     
    foreach my $repcour (@rep) 
    {
        opendir(REP,"$repcour") || die "erreur ouverture $repcour $! \n";
     
        $hash{$repcour} = [ grep{ (($_ ne '..') and ($_ ne '.') and 
                                   (-M $repcour."/".$_ < 2) and (-f $repcour."/".$_)) } readdir REP ];
     
        closedir REP;
    } 
     
    foreach (keys (%hash)) {
        print "$_\n";
        print "@{$hash{$_}}\n";
        print "-----------------------------------------------------\n";
    }
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Bonjour à tous !!!

    Merci beaucoup pour toutes les remarques

    J'ai finalement fait quelques vérifications à la lumière de vos posts et me suis aperçu qu'il y avait quelques erreurs.

    Voilà qui fonctionne mieux désormais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(my $i=0;$i<=$#Repertoire_archives_IDOC;$i++)
          {
     
                opendir(REP,"$base_archives_IDOC$Repertoire_archives_IDOC[$i]") || die "erreur ouverture $base_archives_IDOC$Repertoire_archives_IDOC[$i] $! \n";
                @{$tab2{$Repertoire_archives_IDOC[$i]}}=grep{$_ ne '..' and $_ ne '.' and !(-d $base_archives_IDOC.$Repertoire_archives_IDOC[$i].$_) and -M $base_archives_IDOC.$Repertoire_archives_IDOC[$i].$_ <1 } readdir REP;
                closedir REP;
          }
    Est ce que ce code est optimisé ???
    tout le monde est d'accord pour critiquer la pensée unique

Discussions similaires

  1. [WM20] Reprisesaisie qui ne fonctionne pas bien
    Par Mister_bin dans le forum Windev Mobile
    Réponses: 2
    Dernier message: 03/07/2015, 13h12
  2. Web App qui ne fonctionne pas (bien)
    Par Nono_Robot dans le forum Développement iOS
    Réponses: 0
    Dernier message: 14/01/2013, 16h07
  3. requete qui ne fonctionne pas tres bien!
    Par touille dans le forum Hibernate
    Réponses: 1
    Dernier message: 16/07/2008, 12h10
  4. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59
  5. Programme Perl tout simple qui ne fonctionne pas
    Par jejerome dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2006, 23h58

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