[Algorithme][PERL] Trie, recherche sur des fichiers

Trie, recherche sur des fichiers [Algorithme][PERL] - Programmation

Marsh Posté le 07-02-2002 à 12:01:45    

:hello:
Je cherche un algorithme qui puisse m'enlever les doublon dans un fichier.
j'ai une solution, mais elle ne fonctionne pas très bien .....
 
Merici de votre participation :jap:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 07-02-2002 à 12:01:45   

Reply

Marsh Posté le 07-02-2002 à 14:38:10    

Vous avez des idée si vous plaise  :cry:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 07-02-2002 à 15:27:40    

quel type de doublons ? noms de fichiers, texte dans un fichier, etc. ?

Reply

Marsh Posté le 07-02-2002 à 16:18:23    

fichier texte (enfin CSV)
des adresses identiques (rue, code postal, ville)
 
Je l'aurais bien fait la main, mais sur plus de 5000 lignes et une vingtaines de colonnes, je  :pt1cable:
 
j'ai une solution mais elle n'a pas l'air de bien fonctionner !!


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 07-02-2002 à 16:28:19    

he bien si ton fichier tient en mémoire, tu peux remplir un tableau contenant chaque ligne, puis le trier, puis enlever les doublons.
 
je n'ai jamais utilisé perl, mais tu dois pouvoir :
 
* créer une structure qui contient tous tes champs
* lire les 5000 champs dans un tableau de ces structures
* les trier (par ex avec qsort() du C, tu donnes un bout de code qui permet de faire le tri - ici, des comparaisons de chaînes suffiront, sur les 20 champs)
* une fois que ton tableau est trié, tu le parcours, puis tu écris chaque ligne à condition que la suivante soit différente.
 
une variation est de faire un hash des lignes, par ex un md5, associer à ce hash le numéro de ligne du fichier, trier les md5, et se servir du numéro de ligne pour relire le fichier source et écrire le fichier trié (en fait il vaut mieux stocker un offset de fichier et faire des seek() dedans).
 
la deuxième soluce implique que tes lignes soient identiques au caractère près. sinon, boum. tu peux aussi rajouter un bout de code qui transforme la ligne en une réprésentation interne pour créer ton hash (ie, convertir tout en minuscule, supprimer les espaces superflus, etc.)

Reply

Marsh Posté le 07-02-2002 à 16:55:32    

c ce que j'ai fait sauf que mettre tous en memoire, c pas ce que j'ai fait, je lit les lignes les une aprés les autres dans 1 fichiers, et je recherche cette ligne dans un autre fichier...
 
ca marche plus ou moins mais bon
Merci quand meme :D


---------------
Tout à commencé par un rêve...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed