Doublons

Résolu
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 16 mars 2006 à 01:08
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 16 mars 2006 à 15:22
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

clementio Messages postés 432 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 février 2014 1
16 mars 2006 à 07:38
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
PhilocheMan Messages postés 55 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 mars 2006 1
16 mars 2006 à 12:07
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.
0
TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 1
16 mars 2006 à 12:25
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.
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
16 mars 2006 à 15:22
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...
0
Rejoignez-nous