Zeile suchen und die Vorangehenden Zeilen mitausgeben

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

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

    Zeile suchen und die Vorangehenden Zeilen mitausgeben

    Hallo ans Forum,

    ich kniffel schon seit 2 Tagen an dem Problem.
    Ich möchte eine Zeile auslesen die einen bestimmten Wert enthält. (Soweit kein Problem)
    Jedoch sollen ebenfalls beide Zeilen davor auch ausgegeben werden. (Hier scheitere ich)

    Mal ein Beispiel meines Codes:

    VB.NET-Quellcode

    1. Dim mlang = AppDomain.CurrentDomain.BaseDirectory & "mlang.txt"
    2. Dim lines() As String = File.ReadAllLines(mlang)
    3. Dim teamlist As New List(Of String)
    4. For Each Team In DataSet.Teams.Rows()
    5. teamlist.Add(Team.item(0))
    6. Next
    7. For Each line As String In lines
    8. For Each team In teamlist
    9. If line.Contains(team) Then
    10. TextBox3.Text &= Environment.NewLine & lines(line - 2) & lines(line -1) & line
    11. End If
    12. Next
    13. Next


    So bekomme ich "ungültige Konvertierung in Double" ist klar weil ich mit Strings nicht rechnen kann.

    Ja doppelte For Each Schleife ist auch nicht so toll gelöst, wenn da jemand nen anderen VOrschlag hat bin ich auch für offen.


    Danke schonmal für eure Hilfe.
    @Eppo4Plus Machst Du zunächst Option Strict On :!:
    Oder was ist "Roulade mit Klößen" - 1?
    Dann machst Du aus der ForEach-Schleife eine For-Schleife und dann hast Du Deinen Index, von dem Du eins oder zwei abziehen kannst.
    Feddich.
    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!
    @RodFromGermany
    Danke für deine Antwort.
    Wäre schön wenn du vielleicht Höflicher wärst.

    Das ich mit Strings nicht rechnen kann ist mir klar! (hatte ich ja auch geschrieben!)
    Es sollte nur zur veranschaulichung dienen was ich erreichen möchte.

    Und es wäre super wenn du mir erleutern könntest wieso mir eine reine For Schleife gegenüber einer For each Schleife helfen soll.
    Immerhin muss ich ja ersteinmal die entsprechende Zeile die Ich haben will finden.


    Bisher ist dein Post relativ nutzlos für mich.

    Eppo4Plus schrieb:

    Höflicher
    What :?:
    Ich habe Dich direkt auf Deine Fehler hingewiesen.
    Hast Du Dein Projekt auf Option Strict On umgestellt :?: Visual Studio - Empfohlene Einstellungen
    Wenn Du das getan hast und wenn Du verstanden hast, was da passiert, melde Dich wieder.
    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!
    @RodFromGermany

    Okay...
    ...versuchen wir es auf einem anderen Fuss.

    Danke das du mich auf einen Fehler hingewiesen hast der mir bekannt ist.
    Nein mein Projekt ist nicht auf "Option Strict On" und ich habe es auch nicht dementsprechend umgestellt.

    Danke für deine Empfehlung dies zutun.

    Jedoch besteht das eigentliche Problem weiterhin.

    Wie kann ich nach einem bestimmten Wert in einer Zeile suchen und dann diese und die zwei vorangehenden Zeilen in einer Textbox ausgeben?
    - Zeile finden [gelöst via For each]
    - Zeile & 2 vorherige Zeilen ausgeben [offen]

    Wäre sehr dankbar für eine Lösung.
    wie gesagt wie ich mit ner reinen For Schleife da ran gehen soll verstehe ich leider nicht.
    For Each ist für Fälle, in denen ein Index keine Rolle spielt. Man kann ihn im Nachhinein noch mit einer Zählvariable einzufügen - aber dann kann man gleich in Zeile#9 mit einer normalen For-Schleife arbeiten:

    VB.NET-Quellcode

    1. For i = 0 To Lines.Count - 1
    2. ...Lines(i)...
    3. ...Lines(i - 1)...
    4. ...Lines(i - 2)...
    5. Next
    Das sagte aber RfG schon. Es sollte das Problem lösen. Aber Folgefehler durch Option Strict Off bleiben. Denn auch Zeile#5 und #6 gehen schöner in typisierter Form. Aber das wird noch früher oder später eh zum Tragen kommen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Vielen Dank für die kurze Erklärung.
    Jetzt hab ich das mit der For Schleife auch verstanden. :)

    Funktioniert so wie ich es brauche. :D


    Sicherlich arbeitet es sich sauberer und übersichtlicher mit "Option Strict on". Jedoch ist es für dieses Projekt nicht mehr Praktikabel dies Umzusetzen da es kurz vor dem Abschluss steht.
    In der nächsten Version werde ich mich damit Befassen entsprechend mit "Option Strict on" zu arbeiten und bin dankbar für diesen Hinweis.

    @RodFromGermany
    Hiermit auch nochmal meine Entschuldigung an dich.
    Ich weiß es war nur gut gemeint.
    In diesem Fall brauchte ich jedoch nur eine kurze Lösung mit Erklärung



    Also nochmal danke an alle. Anfrage ist gelöst.

    Eppo4Plus schrieb:

    In diesem Fall brauchte ich jedoch nur eine kurze Lösung
    Das ist nicht Sinn dieses Forums, Lösungen zu präsentieren, sondern die Fragenden zu befähigen, sich selbst zu helfen. Da gibt es zunächst einen Schups in die richtige Richtung.
    Bei Dir war dieser Schubs wohl zu schwach, aber auch zu laut. ;)
    Sorry.
    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!