Bonjour,
Je rencontre un mystère avec la fonction IndexOf. Je dois batir une liste d'éléments uniques basée sur plusieurs sources: une table Access MDB et des fichiers textes. J'ajoute tous les éléments venant de la table MDB puis les éléments venant du fichier texte si celui ci n'est pas déjà présent dans la liste.
La table MDB est bâtie comme suit:
Nom
Prenom
NumeroSecu
les fichiers texte:
Nom<tab>Prenom<tab>NumeroSecu
J'ai créé une classe cItem avec
Nom (string)
Prenom (string)
NumeroSecu (string)
et un tableau Clients as new list(Of cItem)
Je récupère mes enreg de la table via un DataRow():
Ensuite, je récupère mes enreg du fichier texte via un sTexte=File.ReadAllLines(FichierText) et je teste qu'il n'existe pas déjà dans la liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 For Each R As DataRow In Planning dim sNom as string=R(0) : dim sPrenom as string=R(1) : dim sNumeroSecuas string=R(3) LigneMDB = New cItemWith {.Nom = sNom , .Prenom = sPrenom , .NumeroSecu = sNumeroSecu} Clients.Add(LigneMDB ) next
Et bien qu'il existe des doublons entre le MDB et le Txt, le IndexOf ne détecte rien. J'ai bien comparé pour ce doublon chacune des propriétés de classe pour l'enreg issu du MDB et l'enreg issu du Txt. Elles sont toutes égales!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 For Each sLigne As String In sTexte dim sChamps() as string = Split(sLigne, vbTab) dim sNom as string=sChamps(0) : dim sPrenom as string=sChamps(1) : dim sNumeroSecuas string=sChamps(3) LigneTXT = New cItemWith {.Nom = sNom , .Prenom = sPrenom , .NumeroSecu = sNumeroSecu} if Clients.IndexOf(LigneTXT )>0 then msgbox("déjà là!") else Clients.Add(LigneTXT ) end if next
Par contre LigneMDB.equals(LigneTXT) me retourne False![]()
Avez vous une explication ?
Merci pour mes cheveux
Olivier
<LASTNEWS:> Je me suis "amusé" avec LINQ et l'instruction Distinct qui devrait résoudre le problème
Et bien même résultat: il ne voit pas les doublons!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim result = From L In Clients Order By L.Nom, L.Prenom Select L Distinct
Partager