Affichage unique dans une boucle en PERL

Résolu
NMalo Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   -  
Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   1 106
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   1 106
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   1 106
 
initialise les variables avant la boucle :

$temp = ''
$nbfic = 0
0
NMalo Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   1 106
 
de rien ;)

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