Doublon tableaux

olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010 - 5 déc. 2008 à 13:27
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 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

19 réponses

Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 13:38
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).

@++
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 13:44
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!
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 14:08
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
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 14:09
Désolé je pense qu'il y a eu un pb de mise en page.

@++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 14:15
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!
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 14:52
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.

@++
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 15:00
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!
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 15:17
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
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 15:25
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?
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 15:28
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
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 15:37
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
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 15:46
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
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 15:49
et j'ai du mettre dans ton exemple  For j as integer = 0 to combobox1.Items.count -1
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
5 déc. 2008 à 15:55
Désolé pour le pb d'index.

Etrange en effet, la casse est la même ???
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 16:05
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 déc. 2008 à 16:16
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 déc. 2008 à 16:18
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
0
olobo Messages postés 40 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 17 mars 2010
5 déc. 2008 à 16:23
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 déc. 2008 à 16:57
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
0
Rejoignez-nous