Comparaison d'une listbox a une autre.

rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014 - 13 nov. 2011 à 21:58
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 16 nov. 2011 à 21:31
Bonjours , je suis sur un project et voila que je suis pris sur un probleme dont je narrive pas a résoudre. Laissez moi vous expliquez ce que j'aimerais trouvez :)

Sur FormLoad de mon programme , il ouvre un fichier text et le met dans la listbox3. Dans le fichier text il y a , metons sa un peut simple , Premiere ligne : 1 , Deuxieme ligne : 2 , troisieme ligne : 3

Dans mon listbox2 il y a , exemple , Premiere ligne : 1 , Deuxieme ligne : 2 , troisieme ligne : 3 et quatrieme ligne : 4.

Je cherche une fonction qui compare la premiere ligne du listbox2 au listbox3 (au complet pas juste la premiere ligne). Si la premiere ligne du listbox2 est dans la listbox3 alors on supprime la premiere ligne du listbox2 (listbox2.items.removeat(0)) Autrement si la premiere ligne (dison qu'on est rendu a "4") n'est pas dans le listbox3 alors on l'ajoute!

J'espere que je suis claire

(PS : je m'excuse pour ceux qui son mordu de francais.. c'est plein de faute je le sais )

29 réponses

cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
13 nov. 2011 à 23:08
Salut

J'espere que je suis claire

non
il y a un fichier texte
qu'y a t'il dans lisbox1 ,listbox2 et listbox3

(PS : je m'excuse pour ceux qui son mordu de francais.. c'est plein de faute je le sais )

tu n'as pas battu encore le record
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
13 nov. 2011 à 23:45
la listbox1 est vide , listbox2 content du MD5# de certain fichier spécifique. la listbox3 contient du MD5# aussi mais celle ci provien dun fichier ".*Txt". Donc en gros ce que jesail de faire cest de savoir si le MD5# des fichiers "loader" dans mon listbox2 est deja existante dans le fichier "*.Txt" qui est "loader" dans la listbox3. Donc si exemple il y a un MD5# dans la listbox2 qui n'est pas dans la 3 alors je veut la metre dans la listbox1. Cest plus claire un peut ;P?

(Toujours bien de s'avoir que je me situe pas au bas de la page completement pour le francais ;P)
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
14 nov. 2011 à 10:00
Bonjour
Dsl je n'ai pas encore compris

listbox2 content du MD5#

MD5#

il faudrait partir de zero pour comprendre
un listbox sert plutot pour l'interface
pour afficher ton fichier

tu devrais lire chaque fichier dans une list of string et ensuite proceder avec les list
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
14 nov. 2011 à 10:06
Dison que je ne suis pas très abile avec les list sans interface! Mais comment fait on pour savoir si le contenue du listbox2 se trouve deja dans la 3? une comparaison mais j'ai toujours rien trouvé :(
0

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

Posez votre question
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
14 nov. 2011 à 11:09
Private list1 As New List(Of String)
    Private list2 As New List(Of String)
    Private Function ReadFile(ByVal pathfichier As String) As List(Of String)
        Dim listitems As New List(Of String)
        Try

            listitems = System.IO.File.ReadAllLines(pathfichier).ToList
        Catch ex As Exception
            'en cas d'exception affiche l'erreur 
            MessageBox.Show(ex.Message)
            Close()
        End Try
        Return listitems
    End Function
    
    
   
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        list1 = ReadFile(Application.StartupPath & "\test1.txt")
        list2 = ReadFile(Application.StartupPath & "\test2.txt")
        ListBox1.Items.AddRange(list1.ToArray)
        ListBox2.Items.AddRange(list2.ToArray)

        If CheckContains(list1, list2) Then
            MessageBox.Show("list1 contains list2")
        Else
            MessageBox.Show("list1 doesn't contain list2")
        End If
    End Sub
    Private Function CheckContains(ByVal lista As List(Of String), ByVal listb As List(Of String)) As Boolean
        'verifie si lista contient listb

        If listb.Count > lista.Count Then
            Return False
        End If
        For Each item In listb
            If Not lista.Contains(item) Then
                Return False
            End If
        Next
        Return True
    End Function
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
14 nov. 2011 à 19:30
Tout fonctione a l'exeption d'Une chose.

list1 = ReadFile(Application.StartupPath & "\test1.txt")
list2 = ReadFile(Application.StartupPath & "\test2.txt")


La list2 contien deja du texte donc j'ai pas besoin de faire un Readfile. Par quoi je pourrais le remplacer? MErci beaucoup de ton aide en passant!
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
14 nov. 2011 à 20:07
Et aussi , si la lista ne contien pas la listb il faut que la fonction sois en messure de trouvé quel ligne de la lista ne corespond pas a la listb et les ajouté a la listb!
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
14 nov. 2011 à 21:59
Bon
envoi ton code
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
14 nov. 2011 à 22:25
  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim abc As String
        Dim pqr As String()
        'Load la liste email
        abc = My.Computer.FileSystem.ReadAllText("C:\uSyncMD5#.txt")
        pqr = abc.Split(vbNewLine)
        ListBox3.Items.AddRange(pqr)
    End Sub

     'declaration of variables.
        Dim FileNumber As Integer = FreeFile()
        Dim file_path As String

        'Our string will be the selected path of the user
        file_path = TextBox1.Text

        If Directory.Exists(file_path) Then

            'Search for Mp3 in a specific path
            Dim mp3 As String() = Directory.GetFiles(file_path, "*.mp3")
            For Each file_name As String In mp3
                ListBox1.Items.Add(file_name)
                ListBox4.Items.Add(file_name)
            Next file_name

            '"" for wav
            Dim wav As String() = Directory.GetFiles(file_path, "*.wav")
            For Each file_name As String In wav
                ListBox1.Items.Add(file_name)
                ListBox4.Items.Add(file_name)
            Next file_name

            '"" for ogg
            Dim ogg As String() = Directory.GetFiles(file_path, "*.ogg")
            For Each file_name As String In ogg
                ListBox1.Items.Add(file_name)
                ListBox4.Items.Add(file_name)
            Next file_name
        End If

        Do Until ListBox1.Items.Count = "0"
            'Now for the Md5# part.
            Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
            Dim f As FileStream = New FileStream(ListBox1.Items(0), FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
            f = New FileStream(ListBox1.Items(0), FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
            md5.ComputeHash(f)

            Dim hash As Byte() = md5.Hash
            Dim buff As StringBuilder = New StringBuilder
            Dim hashByte As Byte
            For Each hashByte In hash
                buff.Append(String.Format("{0:X2}", hashByte))
            Next

            ListBox2.Items.Add(buff.ToString())
            ListBox1.Items.RemoveAt(0)
        Loop

        'Here we need to check if the current items exist
'Dont c'est ici qu'il faudrais que mon programme vérifie si chaque ligne de la listbox2 est deja présente dans la listbox3


        'Then once we have checked that no items match an other we'll upload them


        'We finaly update the .txt with new MD5# items.
            FileOpen(FileNumber, "C:\uSyncMD5#.txt", OpenMode.Output)
        For Each Item As Object In ListBox2.Items
            PrintLine(FileNumber, Item.ToString)
        Next
            FileClose(FileNumber)

0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
14 nov. 2011 à 23:03
si je comprend
le listbox1 a le meme contenu que listbox4
nom de fichier mp3 wav et ogg

que représente listbox3 listbox2 listbox1
que veux tu faire ?
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
14 nov. 2011 à 23:12
Listbox4 contient les chemin des fichier mp3 wav et ogg
Listbox2 contient le MD5# des fichier mp3 wav et ogg
Listbox3 contient le contenu du fichier .txt
Listbox1 deverais contenir tout ce qui est dans la listbox2 mais qui n'est pas présent dans la 3
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
15 nov. 2011 à 10:28
Salut

toute une salade dans le code
à quoi te sert listbox3 ?
il n'est pas utlisé dans le code
listbox4 te sert seulement pour afficher la list
des fichier wav ogg mp3
dans une loop
tu encryptes la liste des fichiers listbox1
et met le hashresult dans listbox2
et efface le item de listbox1
ListBox1.Items.RemoveAt(0)
donc à la sortie de la loop
listbox1 est vide
listbox2 contient les hash values
Listbox1 deverais contenir tout ce qui est dans la listbox2 mais qui n'est pas présent dans la 3


tu devrais expliquer ce que doit
faire ton projet d'abord
et commenter aussi ton code
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
15 nov. 2011 à 10:43
Mon projet consiste a uploadé les fichier audio sur un site. Il dois donc vérifier si les fichier audio sont deja sur le site. Pour ce faire il crée un fichier txt qui contient tout les MD5# des fichier audio deja uploadé et dois les comparé avec ceux dans le fichier music. Donc voila pourquoi je dois comparé la listbox3 (qui contient les MD5# des fichier audio deja uploader) a la listbox2 (qui va chercher tout les MD5# des fichier audio dans le fichier music). La listbox4 contient le "path" de chaque chanson pour l'uploadé si nécésaire. La listbox1 deverais contenir tout ce qui a dans la listbox2 qui n'a pas été trouvé dans la Listbox3. Ainsi par la suite mon code va ajouté les MD5# du listbox1 au fichier txt pour donc évité par la suite de ré-uploader les fichier audio qui son deja sur le site quelconque!

j'espere que tu comprendras un peut mieu cette fois ci!
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
15 nov. 2011 à 10:45
Et pour clarifier se passage : La listbox1 deverais contenir tout ce qui a dans la listbox2 qui n'a pas été trouvé dans la Listbox3

En gros c'est que si la fonction trouve , exemple , que la ligne 1 de la listbox2 dans la 3 alors il l'enleve de la listbox2. Ainsi jusqu'a ce qu'il reste sois , plus rien ou les MD5# qui ne son pas présent dans la listbox3!
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
15 nov. 2011 à 10:51
Jai oublier un passage , dsl on peut pas édité sa fait beaucoup de re-post.

Donc tous ce qui reste dans la listbox2 je vais la metre dans la 1 ainsi "éffacé" la 2 et refaire le processus (par un timer par exemple) a chaque xx/temps
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
15 nov. 2011 à 11:18
bon
dans listbox3 tu as tous les fichiers uploaded
dans lisbox2 tous les md5 audio du fichier music
comparer
voir si les items de listbox2 ont été uploaded
ou non
si non mettre dans listbox1


Private Sub Compare()
  ListBox1.Items.Clear()
  For Each item In ListBox2.Items
     If Not ListBox3.Items.Contains(item) Then
        ListBox1.Items.Add(item)
     End If
 Next
End Sub
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
15 nov. 2011 à 18:26
Bizzarement. Si j'ai "1 , 2 , 3 , 4" dans la listbox2 et 3 et que j'essail ta fonction. Il rajoute quand meme "1 , 2 , 3 , 4" dans la listbox 1 :(
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 55
15 nov. 2011 à 21:20
si dans listbox2 j'ai 1 2 3 4
et dans listbox3 j'ai 3
dans listbox1 j'aurais 1 2 4

je prend chaque element de listbox2 et verifie
s'il ne sont pas dans listbox3
if true c.a.d qu'il se sont pas dans listbox3
j'ajoute l'element à listbox1
ici
1 n'est pas dans listbox3 ajoute 1 à listbox1
2 n'est pas dans listbox3 ajoute 2 à listbox1
3 est dans listbox3
4 n'est pas dans listbox3 ajoute 4 à listbox1
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
16 nov. 2011 à 02:04
Ok car moi quand j'ai essailer la fonction , Meme si la listbox2 avais le meme contenue que la 3 il l'ajoutais pareil a la 1!
0
rsx602 Messages postés 140 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 28 août 2014
16 nov. 2011 à 02:09
Deuxieme impression d'écran :



Mis apart la premiere ligne qui difere tout le reste se retrouve dans la listbox1 =/
0