Suppression des doublons dans un tableau des chaines

rimenis Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
-
Bonjour,
J'ai un fichier dont chaque ligne contient un mot, j'ai récupéré le contenu de ce fichier dans un tableau et j'ai essayé de supprimer les doublons , j'ai essayé ce code mais toujours il y a des problèmes
voilà le code :

open(F,'E:\\Script\\IN.txt') or die ("Erreur d'ouverture ") ;
#open(FIC,'>E:\\Mastère_2013\\Script\\OUT.txt') or die ("Erreur de creation ") ;



 @Ti = <F>;



my %dejavu;
chomp(@Ti);
foreach my $elem ( @Ti )
{
     $dejavu{$elem} = 1;
}

print $_, "\n" foreach keys %dejavu


Mon fichier d'entré contient les lignes suivants:
bonjour
bonsoir
bonsoir
madame
bonjour
madame

voici la sortie de mon programme :

madame
bonsoir
bonjour
bonjour
Le problème est qu'il ya ajout des caractères dans les 2 bonjour de telle façons ils n'apparaissent pas identiques...
D'ou vient ce problème??
Merci de me répondre


A voir également:

2 réponses


 
Salut rimenis,

Ton fichier de données doit contenir des données en utf8 mal encodées.

Les fichiers textes (correctement) encodés en utf8 peuvent contenir un BOM, qui indique l'utilisation d'un encodage unicode : https://fr.wikipedia.org/wiki/Byte_Order_Mark#UTF-8. Ce marquage est au début du fichier. Il est facultatif.

Bien que Perl manipule nativement des chaînes en utf8, ton fichier ne semble pas lui plaire, et les 3 caractères que Perl voit à gauche du texte de la 1ère ligne de ton fichier correspondent effectivement à la valeur Unicode de \x{feff} en ASCII.

Tu peux essayer de forcer Perl à considérer le fichier comme encodé en utf8 :

open(F, "<:utf8", "E:\\Script\\IN.txt") or die ("Erreur d'ouverture") ;

et voir si cela change quelque chose.

Sinon, tu peux corriger l'encodage de ton fichier, ou si tu n'utilises que du ISO-88591-1, retirer le BOM. Tu peux faire ces différentes manipulations avec Notepad++ sous Windows (menu "Encodage").


Dal
0
rimenis Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir ,
J'ai reussi à resoudre le problème d'encodage en utilisant ce code :

open(F,'E:\\Script\\IN6.txt') or die ("Erreur d'ouverture ") ;

open(FIC,'>E:\\Script\\OUT.txt') or die ("Erreur de creation ") ;

@Ti = <F>;
close F;
my $line = shift @Ti; 
$line =~ s/^\x{ef}\x{bb}\x{bf}//; #retire la BOM UTF-8 de début de fichier 
unshift @Ti, $line; 
map {chomp; s/(^\s*|\s*$)//g} @Ti; 

my %dejavu;


foreach my $elem ( @Ti )
{
     $dejavu{$elem} = 1;
}
#print $_ , "\n" foreach keys %dejavu

print FIC $_ , "\n" foreach keys %dejavu
	


Mais avec cette solution j'ai perdu l'ordre des mots .... Avez vous une solution??
0

Discussions similaires