Suppression des doublons dans un tableau des chaines
Fermé
rimenis
Messages postés
3
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 février 2013
-
22 févr. 2013 à 12:13
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 févr. 2013 à 13:36
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 févr. 2013 à 13:36
A voir également:
- Notepad++ supprimer les doublons
- Supprimer les doublons excel - Guide
- Telecharger notepad++ - Télécharger - Édition & Programmation
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 22/02/2013 à 13:13
Modifié par [Dal] le 22/02/2013 à 13:13
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 :
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
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
rimenis
Messages postés
3
Date d'inscription
samedi 1 décembre 2012
Statut
Membre
Dernière intervention
22 février 2013
22 févr. 2013 à 19:26
22 févr. 2013 à 19:26
Bonsoir ,
J'ai reussi à resoudre le problème d'encodage en utilisant ce code :
Mais avec cette solution j'ai perdu l'ordre des mots .... Avez vous une solution??
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??
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 25/02/2013 à 13:24
Modifié par [Dal] le 25/02/2013 à 13:24
Salut,
Que veux tu dire par "perdu l'ordre des mots".
Dans l'exemple de ton post d'origine tu faisais :
Mon fichier d'entré contient les lignes suivants:
bonjour
bonsoir
bonsoir
madame
bonjour
madame
voici la sortie de mon programme :
madame
bonsoir
(...)
Tu veux dire que ce n'est pas, en fin de compte, ce que tu veux, et que tu veux avoir :
bonjour
bonsoir
madame
?
Dal
Que veux tu dire par "perdu l'ordre des mots".
Dans l'exemple de ton post d'origine tu faisais :
Mon fichier d'entré contient les lignes suivants:
bonjour
bonsoir
bonsoir
madame
bonjour
madame
voici la sortie de mon programme :
madame
bonsoir
(...)
Tu veux dire que ce n'est pas, en fin de compte, ce que tu veux, et que tu veux avoir :
bonjour
bonsoir
madame
?
Dal
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 25/02/2013 à 13:38
Modifié par [Dal] le 25/02/2013 à 13:38
Si c'est cela, tu peux faire comme ceci :
(j'ai retiré le chomp, car tu remets un \n dans le fichier de sortie).
Dal
open(F,'E:\\Script\\IN6.txt') or die ("Erreur d'ouverture ") ; open(FIC,'>E:\\Script\\OUT.txt') or die ("Erreur de creation ") ; my %dejavu; while(<F>) { s/^\x{ef}\x{bb}\x{bf}//; print FIC $_ unless $dejavu{$_}++; } close F; close FIC;
(j'ai retiré le chomp, car tu remets un \n dans le fichier de sortie).
Dal
22 févr. 2013 à 14:15
Dal
22 févr. 2013 à 14:17
Dal