Listbox Einträge vergleichen.

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von slim.

    Listbox Einträge vergleichen.

    Hey Leute,

    Ich habe ein Problem.

    Und zwar habe ich zwei Listboxen, diese möchte ich gerne miteinander vergleichen.

    Z.B.
    Listbox1:
    test1.txt
    test2.txt
    test3.txt
    test4.txt

    Listbox2:
    test2.txt
    test3.txt
    test5.txt


    Nun möchte ich wissen welche Dateien in Listbox 1 und in Listbox 2 Vorhanden sind.
    Also welche es in Beiden gibt.
    D.h. am ende möchte ich dieses Ergebnis haben:
    test2.txt
    test3.txt


    Habe aber leider keine Ahnung und noch nicht mal einen Ansatz wie ich das lösen könnte.
    Ein einfacher Vergleich der beiden Listboxen hilft mir ja leider nicht weiter, da die Einträge an verschiedenen Stellen stehen.
    Und ein sortieren der Einträge auch nicht, weil z.B in Listbox 1 mehr einträge stehen können als in Listbox 2...

    Hat einer von euch eine Idee oder einen Code Ansatz?

    Gruß!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slim“ ()

    Dodo schrieb:

    Verfügt die Listbox nicht auch über eine Contains()-Methode?

    Also Schleife durch die eine Listbox und mittels Contains() Prüfen ob das Item auch in der anderen Listbox vorhanden ist.

    Okay danke.

    Hab das jetzt so gelöst:

    VB.NET-Quellcode

    1. For Each zeile As String In ListBox2.Items
    2. ListBox4.Items.Contains(zeile)
    3. Next


    Beim Debuggen sehe ich nun auch welche Dateien in beiden Listboxen Vorhanden sind nur wie kann ich mir die Dateien in einer variablen ausgeben lassen?


    Weil ich das hier irgendwie einbauen muss...


    Zur Info, ich möchte die Dateien umbennen (Auf dem Server), die in beiden Listboxen vorhanden sind, damit beim hochladen die Datei nicht ersetzt wird.
    Und die die nur in Listbox 2 vorhanden ist normal hochladen.



    VB.NET-Quellcode

    1. For Each zeileaufserver As String In ListBox2.Items
    2. For Each Zeile As String In ListBox4.Items
    3. If Zeile = zeileaufserver Then
    4. Dim Request As Net.FtpWebRequest = Net.WebRequest.Create(ftpserver & zeileaufserver)
    5. Dim Response As Net.FtpWebResponse
    6. Request.Credentials = New Net.NetworkCredential(Benutzername, passwort)
    7. Request.Method = Net.WebRequestMethods.Ftp.Rename
    8. Request.Timeout = (60000 * 1) ' timeout
    9. Request.RenameTo = zeileaufserver + "1" 'Neuer Name
    10. Response = Request.GetResponse()
    11. Response.Close()
    12. My.Computer.Network.UploadFile(uppathall & "\" & Zeile,
    13. ftpserver & Zeile, Benutzername, passwort)
    14. Else
    15. My.Computer.Network.UploadFile(uppathall & "\" & Zeile,
    16. ftpserver & Zeile, Benutzername, passwort)
    17. End If
    18. Timer1.Start()
    19. lblausgabe.Text = "Alle Dateien erfolgreich hochgeladen!"
    20. lblhaken.Visible = True
    21. Next
    22. Next
    23. End If

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „slim“ ()

    Hab das jetzt so gelöst:

    VB.NET-Quellcode

    1. For Each zeile As String In ListBox2.Items
    2. ListBox4.Items.Contains(zeile)
    3. Next


    Beim Debuggen sehe ich nun auch welche Dateien in beiden Listboxen Vorhanden sind nur wie kann ich mir die Dateien in einer variablen ausgeben lassen?


    Das scheint so doch nicht zu gehen... Jemand eine andere Idee?
    probierma VB-Tag richtig benutzen. das macht deine Posts leserlicher.

    slim schrieb:

    nur wie kann ich mir die Dateien in einer variablen ausgeben lassen?

    du willst doch garnix ausgeben. Du willst eine Liste von Dateien uppen, und wenn die ZielDatei bereits vorhanden ist, soll sie umbenannt werden.
    ich weiß nichtmal, was du da mit Listboxen anfangen willst, es geht doch um Listen von Strings, da täte sich die List(Of String) doch sehr anbieten, zum Stringse hineintun.

    Jo, und dann ein CodeDesign ausdenken, zunächst einfach mal die Signaturen der erforderlichen Methoden:

    VB.NET-Quellcode

    1. Private Sub UploadManyFiles(ByVal serverFiles As List(Of String), _
    2. ByVal clientFiles As List(Of String))
    3. For Each clientFile In clientFiles
    4. Dim problemIndex = serverFiles.IndexOf(clientFile)
    5. If problemIndex >= 0 Then
    6. RenameFileOnList(serverFiles, problemIndex)
    7. RenameFileOnServer(clientFile, serverFiles(problemIndex))
    8. End If
    9. UploadFile(clientFile)
    10. serverFiles.Add(clientFile)
    11. Next
    12. End Sub
    13. Private Sub RenameFileOnList(ByVal serverFiles As List(Of String), _
    14. ByVal problemIndex As Integer)
    15. 'ein listiger Algo, der einen neuen Namen creiert,
    16. 'welcher in den serverFiles nicht vorkommen darf
    17. 'dieser neue Name wird am problemIndex eingetragen
    18. End Sub
    19. Private Sub RenameFileOnServer(ByVal oldFile As String, ByVal newFile As String)
    20. 'FTP - Rename - Code
    21. End Sub
    22. Private Sub UploadFile(ByVal file As String)
    23. 'FTP - Upload - Code
    24. End Sub

    Puh - schon vonne Logik her weniger trivial als man anfangs denkt
    Naja die Listboxen lasse ich mir im Designer anzeigen, damit man sieht welche Dateien auf dem Server liegen und welche man Lokal hat.
    Außerdem erschien mir das als anfänger einfacher...

    VB.NET-Quellcode

    1. Private Sub UploadManyFiles(ByVal serverFiles As List(Of String), _
    2. ByVal clientFiles As List(Of String))
    3. ' Dateien vom FTPServer in serverfiles Listofstring anzeigen.
    4. Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create(ftpserver)
    5. request.Method = Net.WebRequestMethods.Ftp.ListDirectory
    6. request.Credentials = New Net.NetworkCredential(Benutzername, passwort)
    7. Dim response As Net.FtpWebResponse = request.GetResponse()
    8. Using myReader As New IO.StreamReader(response.GetResponseStream())
    9. Do While myReader.EndOfStream = False
    10. serverFiles.Add(myReader.ReadLine())
    11. Loop
    12. End Using
    13. ' Lokale Dateien in clientfiles Listofstring anzeigen.
    14. uppathall = txtuppathall.Text
    15. Dim dir As New DirectoryInfo(uppathall)
    16. For Each file As FileInfo In dir.GetFiles
    17. clientFiles.Add(file.Name)
    18. Next
    19. '---------------------------------
    20. For Each clientFile In clientFiles
    21. Dim problemIndex = serverFiles.IndexOf(clientFile)
    22. If problemIndex >= 0 Then
    23. RenameFileOnList(serverFiles, problemIndex)
    24. RenameFileOnServer(clientFile, serverFiles(problemIndex))
    25. End If
    26. UploadFile(clientFile)
    27. serverFiles.Add(clientFile)
    28. Next
    29. End Sub


    So weiß nicht ob das jetzt so geht...?!
    Aber ich verstehe nicht wie du das mit dem problemindex meinst...
    Komme da irgendwie nicht weiter...

    Gruß und vielen Dank für deine Hilfe :)