Doublons

Résolu
Signaler
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
-
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
-
Salut a tous,

Voila je dois faire un soft pour trier des doublons dans des fichiers d'adresses, qui peuvent contenir jusk'a 300000 adress.

la pourle moment je charge les fichiers dans un tableau et puis de la je fais une boucle du genre:

For i = 0 To UBound(AddresListA)

For i2 = 0 To UBound(AddresListB)
If StrComp(AddresListA(i), AddresListB(i2)) = 0 Then GoTo nxt
Next i2

ReDim Preserve AddresListb(i3) As String
AddresListB(i3) = AddresListA(i)
i3 = i3 + 1
nxt:

Next i

Ou bien

For i = 0 To UBound(AddresListA)

For i2 = i + 1 To UBound(AddresListA)
If StrComp(AddresListA(i), AddresListA(i2)) = 0 Then GoTo nxt
Next i2

ReDim Preserve AddresListb(i3) As String
AddresListB(i3) = AddresListA(i)
i3 = i3 + 1
nxt:

Next i

Mais c'est vraiment vraiment lent! Et en meme temps je vois pas comment je pourrais faire plus vite ?

Donc si y a des as de l'algorithme dans le coin, ce serait cool de m'eclairer un peu ;)

Merci d'avance
++
Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

4 réponses

Messages postés
432
Date d'inscription
samedi 18 mai 2002
Statut
Modérateur
Dernière intervention
17 février 2014
1
Salut,

Utilise un objet Dictionnary, pour ça rajoute la référence Microsoft Scripting Runtime à ton projet. Un Dictionnary à une methode qui s'appelle "exist". Tu peux faire une boucle qui remplit ton Dictionnary et avant d'ajouter un élément dedans, tu testes si il existe.

Dis-moi si tu veux un exemple mais je ne rentre que ce soir vers 19h.

Clm
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
55
Date d'inscription
jeudi 28 juillet 2005
Statut
Membre
Dernière intervention
23 mars 2006
1
Salut,
Une autre solution consiste à créer une table temporaire et de la remplir des valeurs issues d'une requete Selection de ce type :
SELECT * FROM Matable WHERE Adresse IN (SELECT Adresse FROM MaTable as tmp_Adresse GROUP BY Adresse HAVING COUNT(*) > 1)
Bon courage.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Sinons ordonne tes données dès leur récupération... en fonction de la valeur qui doit être unique
ainsi tous les doublons seront les uns après les autres et tu n'as qu'à les tester 2 à 2...

si tu vois ce que je veux dire...

.Maytheforcebewithyou.Maxime.
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Salut a tous,

Merci beaucoup pour vos reponses :)

Clementio> J'ai essaye avec le composant que tu m'a indique, et c'est incoyable la vitesse a la quelle il fait ca!
c'est instantane la j'ai essaye avec 100 000 adress et ca a pris moins de 2 secondes!
Et dire qu'en 3 jours j'etais descendu de 120 a 60 secondes lol
(P4 a 3.8 Ghz,ddr2 667 !)

PhiloCheman> ta methode m'interesse aussi, pourrais tu developper un peu plus stp ?

TrafMaxime> eh wai c'est une sollution, mais je ne pense pas que ca puisse aller plus vite que la boucle que je faisais...

Encore merci a tous :)

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...