Bei if else wird das else übersprungen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Bei if else wird das else übersprungen

    Hallo,

    ich will Dateien eines Ordners auf Modifikation überprüfen also ob sie bearbeitet wurden. Das tue ich mit einem Hash check.
    Die Dateien liste ich in einer Listiview auf und gleiche sie mit einem wert in der Richtextbox ab. Die werte werden in die Richtextbox von einer Textdatei auf meinem Server geladen und diese wiederum werden in verschiedene Textboxen unterteilt.

    In der Richtextbox werden die werte wie folgt aufgelistet: Dateiname = Dateigröße = Dateihash = Dateipfad

    Es funktioniert so:
    Es sucht die Richtextbox zeilen nach dem "Sub item 0" eintrag ab. In diesem fall der Dateiname und wenn dieser existiert wird der Hash in der selben Zeile gesucht. Dann gleicht es den Server Hash (Textbox & Richtextbox) mit der Lokalen Hash (Sub item) ab.
    Das Endresultat soll in "Sub item 4" mit "Ja" oder "Nein" zurückgeben. Also in meinem fall "Nein" wenns übereinstimmt und "Ja" wenn es nicht übereinstimmt. Das passiert alles in einer For Each item schleife.

    Mein Problem:
    Der Code gibt nur das "Nein" zurück aber das im else befindende "Ja" überspringt es und gibt nichts bzw. ein leeres Sub item zurück. Also Datei modifiziert = leeres Sub item.

    Mein code:

    VB.NET-Quellcode

    1. Dim FoundPos As Integer
    2. Dim FoundLine As Integer
    3. Dim Line As Integer
    4. FoundPos = RichTextBox1.Find(itm.SubItems(3).Text)
    5. If FoundPos <> -1 Then
    6. FoundLine = RichTextBox1.GetLineFromCharIndex(FoundPos)
    7. Line = CStr(FoundLine)
    8. TextBox8.Text = CStr(FoundLine)
    9. For i As Integer = 0 To RichTextBox1.Lines.Count - 1
    10. If RichTextBox1.Lines(i).Contains(itm.SubItems(3).Text) Then
    11. TextBox3.Text += (RichTextBox1.Lines(i)) + vbNewLine
    12. End If
    13. Next
    14. Dim Split As String() = TextBox3.Text.Split({"="c}, StringSplitOptions.RemoveEmptyEntries)
    15. TextBox4.Text = Split(0).Trim
    16. TextBox5.Text = Split(1).Trim
    17. TextBox6.Text = Split(2).Trim
    18. TextBox7.Text = Split(3).Trim
    19. If itm.SubItems(3).Text = TextBox6.Text Then
    20. itm.SubItems.Add("No")
    21. Else
    22. itm.SubItems.Add("Yes")
    23. End If
    24. End If
    @Gang1111 Willkommen im Forum. :thumbup:
    So ohne Daten lässt sich da nicht viel sagen.
    Setze in die Schleife einen Haltepunkt, steppe sie durch und überzeuge Dich davon, dass in den Variablen der Inhalt steht, den Du erwartest.
    Lerne, Deinen Code zu debuggen.
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo danke erstmal für den link. Ich schau mir das an wenn ich zuhause bin.

    Ich habe es mit Haltepunkten versucht (Ok ich gebe zu mit messageboxen :saint: ) aber nach der else Anweisung kommt nichts. Nichtmal mein Haltepunkt.
    Bin jetzt auch kein Neuling der überhaupt keine Ahnung hat und hab auch selber genug Erfahrung sammeln können aber Natürlich bin ich auch kein Profi haha.
    Aber sowas wie das überspringen der Else Anweisung hatte ich auch noch nie und eine Lösung konnte ich leider nicht finden.

    Was für daten brauchst du denn? Hab versucht soviel info zu geben wie es geht.

    Gang1111 schrieb:

    aber nach der else Anweisung kommt nichts. Nichtmal mein Haltepunkt.
    Ist da ein alles ignorierender Try-Catch-Block in Deinem Code?
    Poste ggf. das bereinigte (ohne bin, obj, vs-Ordner) und gezippte Projekt:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Eierlein Da bist Du aber mit nem Haltepunkt in Deiner Zeile 7 schneller.
    @Gang1111 Falls Groß- und Kleinschreibung eine Rolle spielt, vergleiche CaseInvariant oder mach beide .ToLower().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich sehe im Code einen Fehler:

    VB.NET-Quellcode

    1. Dim FoundPos As Integer
    2. Dim FoundLine As Integer
    3. Dim Line As Integer
    4. FoundPos = RichTextBox1.Find(itm.SubItems(3).Text)
    5. If FoundPos <> -1 Then
    6. FoundLine = RichTextBox1.GetLineFromCharIndex(FoundPos)
    7. Line = CStr(FoundLine)
    8. '...

    CStr wandelt FoundLine in einen String um, und das weist du einer Integer-Variable zu!

    Das zeigt, dass du Option Strict Off programmierst, sonst würde bereits der Compiler dich auf diesen Type-Mismatch aufmerksam machen.
    Also als allererstes: Visual Studio – Empfohlene Einstellungen

    RodFromGermany schrieb:

    Ist da ein alles ignorierender Try-Catch-Block in Deinem Code?

    Nein es läuft nicht in einem Try-Catch-Block.

    RodFromGermany schrieb:

    vergleiche CaseInvariant oder mach beide .ToLower()

    Hab ich auch gemacht. Aber es wird weiterhin einfach übersprungen.

    ErfinderDesRades schrieb:

    Das zeigt, dass du Option Strict Off programmierst

    Mit Option Strict oder allgemein mit dem Option Befehl hab ich nie gearbeitet. Ich schau mir das an danke :)

    @Eierlein Es überspringt den nicht einstimmenden item einfach. Also da wo ein Ja sein soll wird von der For Each item schleife einfach übersprungen.



    Ich hab das Problem jetzt wohl gelöst. Ich hab den kompletten Code entfernt und es simpler gemacht.

    Textbox 8 gibt die zeilen nr an.
    Textbox 3 liest die gesammte zeile aus.

    VB.NET-Quellcode

    1. TextBox8.Text = RichTextBox1.Lines.ToList.FindIndex(Function(item) item.ToLower.Contains(itm.SubItems(0).Text.ToLower)).ToString
    2. TextBox3.Text = (RichTextBox1.Lines(TextBox8.Text))
    3. Dim Split As String() = TextBox3.Text.Split({"="c}, StringSplitOptions.RemoveEmptyEntries)
    4. TextBox4.Text = Split(0).Trim
    5. TextBox5.Text = Split(1).Trim
    6. TextBox6.Text = Split(2).Trim
    7. TextBox7.Text = Split(3).Trim
    8. If itm.SubItems(3).Text = TextBox6.Text Then
    9. itm.SubItems.Add("No")
    10. Else
    11. itm.SubItems.Add("Yes")
    12. End If


    @RodFromGermany Die lösung war .ToLower() nur halt anders formuliert.
    Trotzdem super vielen dank an alle für eure mühe und antworten ^^

    Posts zusammengefügt. ~Thunderbolt

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

    Gang1111 schrieb:

    nur halt anders formuliert.
    Das hättest Du durch Debuggen allein herausbekommen, wenn Du merkst, dass der Vergleich von Tannengrün und tannengrün eben False ergibt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Gang1111 schrieb:

    Hab ja gedebuggd
    Offensichtlich fehlen Dir da noch ein paar Übungsstunden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!