Perl : dédoublonner une liste

Dans ce billet, un bout de code pour expliquer une manière de dédoublonner une liste en Perl.

Dans le code suivant, nous faisons une écriture dans un fichier si le mail ($tmp) que l'on reçoit dans $mesg->entries n'est pas déjà présent dans notre fichier.

Plutôt que de parcourir le fichier a chaque fois, j'ai préféré faire une liste de hashage et d'y mettre les emails traités au fur et à mesure de la boucle, et vérifier dans cette dernière si le mail était déjà présent.

La variable $mesg est bien évidemment chargée plus en amont dans mon code, mais cette partie ne nous intéresse pas ici.

Voici donc ce que ça donne :

my $UserCount = 0;
open(OUT,">$TmpFile");
flock(OUT, LOCK_EX);
 
# Hash vide pour dédoublonner les mails que l'on va récupérer
%mailhash = ();
 
# Filtering results for name variations.
foreach my $entry ( $mesg->entries ) {
     $UserCount++;
     $tmp=$entry->get_value("mail");
     $tmp=lc($tmp);
 
# Si le mail est déja dans la liste on ne fait rien
     if ( exists ( $mailhash{$tmp} ) ) {
        #print "Doublon trouvé : $tmp\n";
     } else {
 
        #print "Youhou c'est passé ! \n";
# Sinon on l'ajoute au hashlist et on continue
        $mailhash{$tmp}=1;
 
# On ne prend pas certains emails non plus
        next if ($tmp=~/_tous/); # si le mail ne contient pas "_tous"
        next if ($tmp=~/^membres/); # si le mail ne commence pas par "membres_"
 
# On vire le catchall
        next if ($tmp=~/^\@cp2i.com/);
 
# Ecriture de l'email dans le fichier
        print OUT "$tmp\n";
 
     }
}
flock(OUT, LOCK_UN);
close(OUT);

En espérant que cela vous a aidé :)

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://blog.cp2i.com/?trackback/15

Fil des commentaires de ce billet