Supprimer les doublons d'un fichier texte ? [Résolu]

chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 27 nov. 2008 à 17:31 - Dernière réponse : chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 nov. 2008 à 11:04
Bonjour,

Je vient de coder un petit programme en C++, qui me permet de supprimer les doublons de mon fichier texte (qui contient près de 200000 lignes). Le problème c'est que c'est vraiment très très lent. Je crois me souvenir qu'il existe une commande Linux qui permet de faire ça tout seul, un truc du genre "sort -u in.txt > out.txt" !
Bon, tout ça c'est bien sympa, mais je bosse sous Windows. Je me demande donc si il n'existe pas un equivalent windows ?

Cordialement

K. Pierre
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 28 nov. 2008 à 18:58
3
Merci
Code ici:
TXT SUPPRIMER LIGNES DOUBLONS (WIN32)
http://www.cppfrance.com/code.aspx?id=48570

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de BruNews
fregolo52
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Dernière intervention
10 juillet 2018
- 27 nov. 2008 à 18:00
0
Merci
Salut,

Tu fais erreur, la commande "sort" existe sous Windows.
Je viens de faire un text avec un fichier qui contient les noms des pays, ça à l'air de marcher :
sort pays.txt > pays2.txt

Ouvre une fenêtre DOS et tape : help sort.
Commenter la réponse de fregolo52
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 27 nov. 2008 à 18:34
0
Merci
Effectivement, cette commande existe bel et bien sous DOS, mais elle ne semble pas remplir la meme fonction que sous Linux. La seul chose que j'ai reussie a faire avec cette commande là, c'est reorganiser mon fichier par ordre alphabetique. De plus, l'aide n'indique rien concernant les doublons ... :(
Commenter la réponse de chtitpierre78
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 27 nov. 2008 à 19:45
0
Merci
Par "doublon", tu entends ligne complète ?

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 27 nov. 2008 à 19:59
0
Merci
Oui, j'entend ligne compléte. Voila a quoi ressemble mon fichier :

C:\Program Files\toto\a.exe
C:\Program Files\tata\b.exe
C:\Documents and Settings\tutu\moi.jpg
C:\Program Files\toto\a.exe
C:\test.mp3
...

Donc de temps en temps, j'ai 2 chemins qui sont identiques. Comme ici avec "C:\Program Files\toto\a.exe" qui apparait 2 fois. Je souhaiterais donc supprimer ce doublon, pour ne voir apparaire cette ligne qu'une fois. J'ai bien un petit programme en C++ qui me fait, mais ca prend des heures (des vrais heures, celle de 60 minutes hein !  ) ... !

Cordialement

K. Pierre
 
Commenter la réponse de chtitpierre78
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 27 nov. 2008 à 20:03
0
Merci
OK, j'ai un creux dans l'emploi du temps.
Vois si tu peux zipper un fichier exemple (super BIG, genre 200 000 lignes) et le mettre sur un FTP pour que je puisse tester les perfs en situation réelle.
PS: Pas envie de me burner avec la casse, sera case sensitive.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 27 nov. 2008 à 21:06
0
Merci
Bah en fait, un simple "dir /b /s >  tonfichier.txt" dans la console DOS suffit. Je fait comme ca pour tester. Tu prends 10 ou 20 lignes au pif dans le fichier de sortie, tu copies / colles ici et la dans le fichier, tu obtiens a peu de chose prés mon cas de figure. Actuellement ma procedure en C++ est la suivante :

- Lecture d'une ligne de mon fichier liste
   - Je regarde si la ligne lue est presente dans mon fichier de sortie (celui où chaque ligne sera unique)
      - Si elle n'est pas presente, je l'ecris dans ce fichier de sortie et je passe la la ligne suivante de ma liste
      - Si elle est presente, je n'ecris rien et je passe a la ligne suivante de ma liste

Je ne pourrais poster mes sources que demain, le tout est au boulot ;)

Cordialement

K. Pierre
Commenter la réponse de chtitpierre78
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 27 nov. 2008 à 21:14
0
Merci
Laisse tomber tes sources, en heures pas utile...
Je vais tester sur petit et je te dirai quand sera dispo, tu testeras en situation réelle.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 27 nov. 2008 à 22:31
0
Merci
http://brunews.com/LignDbl.zip



exe de 2.5 Ko dans le zip.
J'ai juste testé sur petit fichier, tu nous diras si va bon je donnerai le code.

ATTENTION: il faut mettre le fichier à traiter dans dossier du exe et le nommer a.txt, si tout ok on mettra le nom de fichier en param de la fonction (ou de l'exe).

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 27 nov. 2008 à 22:32
0
Merci
OUPS,
oublié de préciser que le fichier est refait sur place, pas de fichier 2 de fait.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 28 nov. 2008 à 09:26
0
Merci
Bonjour et merci du temps que tu as consacré a mon post.
Âpres quelques tests, il semblerais que tout fonctionne, et ceci a vitesse grand V. Pour un fichier de 200 000 lignes, le traitement est effectué en moins d'une minute)
Je suis assez surpris par la rapidité de ton programme, j'ai hâte de mettre le nez dans le source.

Merci encore pour ton aide précieuse, j'attends ton code :)

Cordialement.
K. Pierre
Commenter la réponse de chtitpierre78
chtitpierre78
Messages postés
30
Date d'inscription
lundi 24 février 2003
Dernière intervention
29 décembre 2008
- 29 nov. 2008 à 11:04
0
Merci
Merci encore, c'est parfait ;)
Commenter la réponse de chtitpierre78

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.