Doublon tableaux

Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
- - Dernière réponse : NHenry
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
- 5 déc. 2008 à 16:57
Hello!
Voila après de multiple recherche je vient m'adresser a vous , voila ce qu'il en est j'insère des données dans un tableaux et ensuite j'aimerais trier ce tableaux afin qu'il n'y est pas de doublon dans celui ci, j'ai essayer plein de chose mais a chaque fois on me dit quee je suis en dehors de l'index  lorsque je fais une boucle pour teste si tableaux(i) <> tableaux(i+1) par exemple(entre d'autre chose que j'ai essayer) donc j'aimerais savoir si quelqu'un pourrai me donner un petit coup de main pour trier ce fichu tableaux qui commence a m'énerver lol
Merci beaucoup pour  votre temps!
ps : le tableaux contient des caractères
Afficher la suite 

19 réponses

Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Salut,

Je pense que ton problème est que tu as oublier que le premier indice d'un tableau est 0.

Donc pour parcourir un tableau on fait :

For i as Integer= 0 to Montableau.length - 1

   'Ici tu fais ton tri

Next

En détail : le premier élément d'un tableau est 0 don on parcours jusqu'à la taille du tableau MonTableau.length (qui ramène le nombre total d'éléments) - 1 (parce qu'on commence à 0).

@++
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
Salut!
Merci pour ta reponse non je n'est pas oublie que sa commencer a 0 en effet je fais For i = 0 To tab.Length - 1
mais après pour faire le trie je pense que je doit faire quelque chose de faux donc le problème vient de la comment faire le trie dans un tableaux?
Merci!
Commenter la réponse de olobo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Essaye ça : Code issu de http://www.codyx.org/snippet_supprimer-doublons-tableau-chaines_653.aspx

PublicSharedFunction RemoveDuplicatedItems(ByVal array AsString()) AsString()
  IfNot (array IsNothing) AndAlso (array.Length > 0) Then
    Dim arrayTmp AsNew List(OfString)(array)
    arrayTmp.Sort()
    For i AsInteger = arrayTmp.Count - 1 to 0 Step -1
      If arrayTmp(i).CompareTo(arrayTmp(i - 1)) = 0 Then
        arrayTmp.RemoveAt(i)
      EndIf
    Next
    Return arrayTmp.ToArray()
  Else
    ReturnNothing
  EndIfEndFunction
Commenter la réponse de Le newbie
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Désolé je pense qu'il y a eu un pb de mise en page.

@++
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
hmmm ça me semble bien compliquer ça lol 
Si je passe pas par un tableaux je peut sans doute faire un trie directement voila mon code :

 For Each file As String In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
                i = i + 1
                 extension = Microsoft.VisualBasic.Right(Namewithoupath, Len(".") + 3)
                combobox1.Items.Add(extension)

            Next

Donc comment faire pour qu'il test si l'extension existe et qu'il ne l'ajoute pas?
Merci beaucoup pour l'aide!
Commenter la réponse de olobo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Ok alors,

For Each file As String In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
                i = i + 1
                 extension = Microsoft.VisualBasic.Right(Namewithoupath, Len(".") + 3)

if not combobox.items.IsIntern (extension) then
                combobox1.Items.Add(extension)
end if
            Next

C'est Intern ou IsIntern mais effectivement c'était un peu compliqué pour mettre dans une combo. Comme quoi n bout de code ça aide.

@++
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
hi!
oui desoler de pas avoir mis le bout de code avant
Par contre j'ai essayer ton bout de code mais ni  Intern ou IsIntern n'est reconnu?
Merci a toi!
Commenter la réponse de olobo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Désolé j'ai pas Visuel studio sous les yeux. Si tu n'as pas ce que je t'ai dit,

Fait une deuxième boucle pour parcourir ta combo :

For Each file As String In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
                i = i + 1
                 extension = Microsoft.VisualBasic.Right(Namewithoupath, Len(".") + 3)

'Ici on parcours la combobox

               For j as integer = 1 to combobox1.Items.count

                        ' Si la valeur est différente de extension et que tu es en fin de parcours alors tu ajoutes
                        if combobox1.items(j) <> extension and j = combobox1.Items.count
                              combobox1.Items.Add(extension)
                        End IF
               Next

Next
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
Merci!
J'ai essayer et la bizarrement il ne m'ajoute plus rien dans la combo elle reste vide alors que logiquement sa devrait marcher ton raisonnement est bon je le comprend parfaitement alors pourquoi?
Commenter la réponse de olobo
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
re!
en fait je vient de tester il ne rentre pas dans la boucle j'ai essaye de mettre un msgbox et rien donc il ne rentre pas dedans
Commenter la réponse de olobo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
re : Essaye de mettre en point d'arrêt pour voir et essayer de comprendre en analysant les valeur présentes dans la combo et la valeur de extension
Vois pour les 3 - 4 premiers items après tes boucle vont être très très longues.

Et en fait je pense que il ne peut pas la parcourir puisqu'elle est vide au démarrage et donc tu devrais ajouter :

For Each file As String In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath)
                i = i + 1
                 extension = Microsoft.VisualBasic.Right(Namewithoupath, Len(".") + 3)

If combobox1.items.count = 0 then
   combobox1.items.add(extension)
End If

'Ici on parcours la combobox

               For j as integer = 1 to combobox1.Items.count

                        ' Si la valeur est différente de extension et que tu es en fin de parcours alors tu ajoutes
                        if combobox1.items(j) <> extension and j = combobox1.Items.count
                              combobox1.Items.Add(extension)
                        End IF
               Next

Next
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
oui c'est ce que j'ai fais dire que la première extension soit ajouter comme tu vient de le dire donc sa marche
mais bizarrement j'ai quelque double je ne sais pa pourquoi parceque par exemple fans mes extension j'ai plusieurs .mp3 et la dans la combo il apparait bien qu'une fois le .mp3 mais .jpg j'en ai plusieurs et il me le note plusieurs fois c'est louche lol
Commenter la réponse de olobo
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
et j'ai du mettre dans ton exemple  For j as integer = 0 to combobox1.Items.count -1
Commenter la réponse de olobo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
0
Merci
Désolé pour le pb d'index.

Etrange en effet, la casse est la même ???
Commenter la réponse de Le newbie
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
re!
J'ai mis un point darret et j'ai regaruder la valeur de j ici : if combobox1.items(j) <> extension
et bien elle reste a 0 donc je pense que le prog test a chaque fois avec la première case donc mp3 qui est équivalent donc il ne l'ajoute pas , mais jpg sera différent de mp3 donc il l'ajoute a chaque fois
Commenter la réponse de olobo
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
Bonjour,

Je te propose :

Dictionary(Of String, String)
Ensuite avant d'ajouter :
if not MyDict.TryGet(MonElement,VariableBidon) then
'Ajout
Else
'Pas d'ajout
End if

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
Oubli de ma part,

Pour traiter le nom du fichier, regarde dans System.Io.Path, tu as plein de truc dedans, pour :
Récupérer le nom du fichier (avec et sans extension)
L'extension
Le chemin
...

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry
Messages postés
40
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
17 mars 2010
0
Merci
hello NHenry!
Merci de te pencher sur le problème mais je ne connais pas  Dictionary(Of String, String) etc je n'est jamais vu sa avant ... ce que ma proposer le newbie semble fonctionner mais le j ne change pas alors ke nous sommes dans uen boucle bizard...
Sinon si tu veut m'expliquer pour le dictionnary je suis toujours preneur :)
Merci
Commenter la réponse de olobo
Messages postés
14600
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 décembre 2019
137
0
Merci
Bonjour,

Dictionary (Of TKey, TValue)
Liste les TValue en fonction d'un TKey, et TKey doit être unique.
Donc en cas d'ajout d'un TKey déjà existant, exception.
Ensuite, tu as dans Dictionary la méthode TryGet (ou presque un nom comme ça), qui permet de récupérer un élément en fonction du TKey si existant et retourne True en réussite et False en échec

Fonctionne en .Net2+.

ensuite, réfère-toi à MSDN pour plus d'info.

Si tu as d'autres questions, je reste à l'écoute.

http://nhen0039.chez-alice.fr/index.php
Commenter la réponse de NHenry