Rechercher : dans
Par :

Perl doublon fichier

Dernière réponse le 7 mai 2008 à 11:39:05 falco-, le 28 jun 2007 à 11:09:52 
 Signaler ce message aux modérateurs

Bonjour,
dans un fichier du type :
aaa
bbbbb
ccccc
aa
aaaa

il s'agit d'enlever les doublons.
Il faudrait à priori (?) passer par une table de hachage.
J'ai essayé :
open(FILE,"$path/toto");
while(<FILE>)
{
push @TdT, [ split('\n', $_) ];
}
my %hachage = @TdT;
my @uniques = keys %hachage;


# affiche le tableau de hachage hachage
foreach my $k (@uniques)
{
print "Clef=$k Valeur=$hachage{$k}\n";
print "Valeurxx=$TdT[$hachage{$k}]\n";

}

# ---> ne donne pas les valeurs



foreach my $t (@TdT)
{ next if $deja_vu{$t}++;
push(@uniques,$t);
}
# --> ceci ne marche pas non plus !
# affiche le tableau uniques
for $aref ( @uniques ) {
print "@$aref\n";
}
# j'obtiens les mêmes données que fichier toto avec les doublons !


et !!!!
for $i ( 0 .. $#TdT ) {
$objet = $TdT[$i][0];
print "elt $i is $objet \n";
print DOUBLONS @uniques ;
print DOUBLONS "\n" ;
}

#--> ne marche pas non plus !


Je pense qu'il y a plus simple !

Merci pour vos lumières.

Configuration: Windows XP
Firefox 2.0.0.1

Meilleures réponses pour « perl doublon fichier » dans :
Perl - Les fichiers Voir La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Perl - Caractéristiques du langage VoirFichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa...
Fichier ISO (Image ISO) VoirFormat ISO Un fichier possédant l'extension .ISO est une image ISO, c'est-à-dire une image d'un disque (CD, DVD ou disque dur) sous forme de fichier, créer avec un logiciel de gravure. Comment lire un fichier ISO ? En l'absence de graveur, il...
Apache - Les fichiers .htaccess VoirLes fichiers .htaccess sont des fichiers de configuration d'Apache, permettant de définir des règles dans un répertoire et dans tous ses sous-répertoires (qui n'ont pas de tel fichier à l'intérieur). On peut les utiliser pour protéger un répertoire...

1

Forest, le 7 mai 2008 à 09:57:36

Le plus simple,
open(FILE,"$path/toto");
my @uniques;
foreach my $ligne (<FILE>) {
my $flag = 1;
foreach my $valeur (@uniques) {
if ($valeur eq $ligne) {
$flag = 0;
}
}
if ($flag) {
push (@uniques,$ligne);
}
}
close FILE;
Et tu obtiens le tableau @uniques qui contient les lignes sans doublons...

Répondre à Forest

2

lami20j, le 7 mai 2008 à 10:56:02

Salut,

le plus simple?! pourquoi?
voici une autre solution ;-)

root@debian:~# cat unique.pl
#!/usr/bin/perl
use strict;use warnings;

my (@unique, %h);
open LIRE,"unique.txt" or die "E/S : $!\n";

print "$_" for @unique = grep { ! $h{$_}++ } <LIRE>;
__END__
root@debian:~# cat unique.txt
aaa
aaa
bbbbb
bbbbb
ccccc
ccccc
aa
aa
aaaa
aaaa
root@debian:~# perl unique.pl
aaa
bbbbb
ccccc
aa
aaaa
106485010510997108

Répondre à lami20j

3

Forest, le 7 mai 2008 à 11:25:56

Qui est encore simplifiable :p

#!/usr/bin/perl
use strict;use warnings;

my %h;
open LIRE,"unique.txt" or die "E/S : $!\n";

print "$_" for grep { ! $h{$_}++ } <LIRE>;
__END__

Répondre à Forest

4

 lami20j, le 7 mai 2008 à 11:39:05

D'accord ;-)

root@debian:~# cat unique.pl
#!/usr/bin/perl
use strict;use warnings;

my %h;
print for grep { ! $h{$_}++ } <>;
__END__
root@debian:~# perl unique.pl unique.txt
aaa
bbbbb
ccccc
aa
aaaa
106485010510997108

Répondre à lami20j