Affichage unique dans une boucle en PERL [Résolu/Fermé]

Signaler
Messages postés
83
Date d'inscription
jeudi 9 juin 2011
Statut
Membre
Dernière intervention
26 juillet 2011
-
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
-
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

Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
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
     
Messages postés
83
Date d'inscription
jeudi 9 juin 2011
Statut
Membre
Dernière intervention
26 juillet 2011
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.
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
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 :)
Messages postés
83
Date d'inscription
jeudi 9 juin 2011
Statut
Membre
Dernière intervention
26 juillet 2011
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 !
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
initialise les variables avant la boucle :

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

Merci pour tout et une excellente continuation à toi.
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
de rien ;)

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