Affichage unique dans une boucle en PERL

Résolu/Fermé
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 - 16 juin 2011 à 13:57
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 16 juin 2011 à 15:07
Bonjour,

Je suis vraiment pas doué en prog...
Je suis chargé de développer un script analysant tous les fichiers d'un répertoire et devant ensuite supprimer les fichiers qui ne respectent pas certaines normes (nommage, taille fichier, doublons et autres).

Pour le moment, ma recherche fonctionne parfaitement.
La suppression des fichiers vides également, mais je ne parviens pas à afficher un résumé de cette opération une seule fois.
J'ai regardé du côté de
next
mais rien à faire, je ne parviens pas au résultat souhaité.

Je me doute que ça doit être un détail de rien du tout, mais pas moyen de trouver :(

Voici la partie qui supprime les fichiers vides avec celle qui est sensée me faire les
print
une seule fois :


  foreach my $fichier_rep (@fichiers)
    {

  #Suppression fichiers vides
  
      sub fic_vide
        {
          push @fic_vide, $File::Find::name if -z
        
        }
 

  find (\&fic_vide,$repertoire);

  $nbfic_supp = (@chemin_fic_supp = grep { unlink } @fic_vide);
  

     print "$nbfic_supp fichiers ont été supprimés.\n";    #C'est cette partie que 
     print "Voici la liste de fichiers supprimés :\n";         #je cherche à n'afficher
     print "$_\n" foreach @chemin_fic_supp;                 # qu'une seule fois
     
         
    }


Par avance merci.

4 réponses

Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
16 juin 2011 à 14:00
il faut les retirer du foreach :

  foreach my $fichier_rep (@fichiers)
    {

  #Suppression fichiers vides
  
      sub fic_vide
        {
          push @fic_vide, $File::Find::name if -z
        
        }
 

  find (\&fic_vide,$repertoire);

  $nbfic_supp = (@chemin_fic_supp = grep { unlink } @fic_vide);    
    }

     print "$nbfic_supp fichiers ont été supprimés.\n";    #C'est cette partie que 
     print "Voici la liste de fichiers supprimés :\n";         #je cherche à n'afficher
     print "$_\n" foreach @chemin_fic_supp;                 # qu'une seule fois
     
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
16 juin 2011 à 14:04
Oui, mon script fonctionne et supprime convenablement les fichiers souhaités, mais les print n'affiche pas le nombre de fichiers supprimés ni les chemins avec cette syntaxe.
Ils s'affichent bien une seul fois.
Merci.
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
Modifié par Templier Nocturne le 16/06/2011 à 14:12
foreach my $fichier_rep (@fichiers) 
    { 

  #Suppression fichiers vides 
   
      sub fic_vide 
        { 
          push @fic_vide, $File::Find::name if -z 
         
        } 
 $nbfic = $nbfic + 1; 

  find (\&fic_vide,$repertoire); 

  $nbfic_supp = (@chemin_fic_supp = grep { unlink } @fic_vide);    
  $temp = $temp."$_\n" foreach @chemin_fic_supp 
  
    } 

     print "$nbfic fichiers ont été supprimés.\n";    #C'est cette partie que  
     print "Voici la liste de fichiers supprimés :\n";         #je cherche à n'afficher 
     print $temp;                 # qu'une seule fois 


j'imagine que ça devrait fonctionner :)
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
16 juin 2011 à 14:48
Yes it works, merci :p

Juste, je n'ai pas e nombre de fichiers supprimés, j'ai trouvé qu'en rajoutant "+" devant le "=" j'avais le nombre de fichiers supprimés, (cf en dessous)

$nbfic_supp += (@chemin_fic_supp = grep { unlink } @fic_vide); 


mais du coup j'ai ces deux messages d'erreur :

"Use of uninitialized value $nbfic in addition (+) at "
&
"Use of uninitialized value $temp in print at"

Merci !
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
16 juin 2011 à 14:56
initialise les variables avant la boucle :

$temp = ''
$nbfic = 0
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
16 juin 2011 à 15:02
Je me sens tellement honteux et mauvais >< . . .

Merci pour tout et une excellente continuation à toi.
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
16 juin 2011 à 15:07
de rien ;)

bon codage à toi, c'est en codant qu'on apprend ;)
0