For Zählschleifen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von svenk2.

    For Zählschleifen

    Hallo und guten Morgen,


    ich bin zur Zeit irgendwie mit meinem Latein am Ende. Ich suche seit Tagen nach einer Lösung und finde keine oder hab sie vielleicht schon gefunden und nur nicht gemerkt. Keine Ahnung. Also, folgender Sachverhalt.


    Ich habe eine Textdatei, die von einem externen Programm beschrieben wird und zwar zeilenweise. Je nach aktuellem Stand des externen Programms können in der Textdatei 1 oder auch 100 Zeilen stehen und alles dazwischen natürlich auch.


    Ich lese die Textdatei mit

    VB.NET-Quellcode

    1. Dim nextT() As String = File.ReadAllLines(My.Settings.pl_path, System.Text.Encoding.UTF8)


    ein. Klar, jetzt könnte man "If then Else" Abfragen einbauen, aber das würde bei 100 Zeilen ein verdammt langer Code werden.


    VB.NET-Quellcode

    1. If nextT.Length = 1 Then
    2. nextT_LBL.text = nextT(1)
    3. ElseIf nextT.Length = 2 Then
    4. nextT_LBL.text = nextT(2)
    5. ....
    6. ....
    7. End If



    Nun hab ich mir wie schon erwähnt seit Tagen "For Zählschleifen" angeschaut, aber ich komm da einfach nicht weiter. Das sah dann z.B. so aus:


    VB.NET-Quellcode

    1. Dim nextT() As String = File.ReadAllLines(My.Settings.pl_path, System.Text.Encoding.UTF8)
    2. For TR As Integer = 0 To nextT.Length
    3. NextT_LBL.Text = nextT(TR)
    4. Next


    Meist kommt dann nur diese Meldung:

    VB.NET-Quellcode

    1. "Der Index war außerhalb des Arraybereichs."



    Was sie bedeutet ist klar nur ich verstehe es nicht. Wie kann der Index außerhalb des Arrays sein, wenn doch nur das, was aus der Textdatei rauskommt (also die gezählten Zeilen) zur Verfügung stehen?

    Ich suche einfach eine Möglichkeit, den variablen Inhalt der Textdatei zeilenweise in meiner Anwendung dazustellen, am besten gleich noch mit Nummerierung.


    Vielleicht könnt ihr mir ja helfen

    Lg

    Ins richtige Unterforum verschoben ~ EaranMaleasi

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

    Hi @svenk2. Ich habe deinen Beitrag aus dem Tipps&Tricks bereich herausgeholt. Bitte achte in Zukunft darauf, wo du deinen Post erstellst.



    Was deine For-Schleife angeht, versuche es mal mit:
    For TR As Integer = 0 To nextT.Length - 1

    Warum die -1? Weil der Index von Arrays, Listen, usw. Nullbasiert ist. Das Erste Element hat den Index 0. Das letzte Element in dem Array hat demnach immer einen Index, der um eins kürzer ist, als die Length des Arrays bzw. Count bei Listen.
    Hallo,

    ich brauche nicht nur die letzte Zeile, ich brauche ALLE Zeilen und in jeder steht was anderes.

    Das externe Programm ist ein Musikprogramm in dem man Playlisten erstellen kann. Anzahl der Lieder nahezu unbegrenzt. Ich habe das aus dem Programm heraus auf 100 limitiert, weil ich mit denke, 100 ist mehr als genug.

    In der Textdatei steht dann also z.B.

    Interpret - Titel 1
    Interpret - Titel 2
    Interpret - Titel 3
    Interpret - Titel 4
    Interpret - Titel 5

    usw. Zeile 0 ist hier unwichtig, die wird an anderer Stelle ausgegeben. Mir ist also wichtig, das ab Zeile(1) ..... ausgegeben wird.

    Nun könnte ich zwar z.B. schreiben

    VB.NET-Quellcode

    1. nextT_LBL.text = nextT(1) + vbNewLine + nextT(2) + vbNewLine + nextT(3)......


    aber das wäre natürlich letztendlich viel Code. Darum ging/gehe ich davon aus, eine Auflistung des Dateiinhaltes müsste doch auch mit einer For Schleife oder ähnlichem machbar sein, eben um den Code klein zu halten und dennoch eine automatische Auflistung zu haben. Zumal sich der Textdateiinhalt ja auch fortlaufend ändert, spätestens wenn ein Lied abgespielt ist und das nächste beginnt.

    Lg
    Da Du schon eine Schleife verwendest, um die Datei zeilenweise einzulesen, kannst du in dieser auch gleich Deinen TextBox.Text generieren.

    VB.NET-Quellcode

    1. Dim Inhalt As String = String.Empty
    2. Dim Count As Integer = 0
    3. For Each Line In IO.File.ReadAllLines(Datei, System.Text.Encoding.UTF8)
    4. If String.IsNullOrWhiteSpace(Line) Then Continue For
    5. Count += 1
    6. Inhalt &= Line & Environment.NewLine
    7. Next
    8. MessageBox.Show("Zeilen: " & Count)
    9. nextT_LBL.Text = Inhalt

    Hi,

    ja das sieht doch schon mal sehr vielversprechend aus. Wenn ich dass jetzt so sehe, hätte ich wahrscheinlich noch ne ganze Weile gesucht. Eine Frage dazu noch. "Count" gibt ja die Anzahl aller Linien in der Datei an, wie muss ich jetzt vorgehen, um noch ein Nummerierung vor dem Inhalt zu haben? Ich Dussel hatte mal was mit ner automatischen Durchnummerierung, habs dummerweise aber gelöscht und finde es nicht wieder.

    ..:: EDIT ::.. Nachträgliche Frage. Wie kann/muss ich den Code von dir umwandeln/ändern, damit erst ab der zweiten Zeile ausgelesen wird? Die erste Zeile wird an anderer Stelle in meinem Programm ausgegeben und so hätte ich die erste Zeile 2mal bei mir drin stehen. Die erste Zeile ist das aktuell laufende Lied und in der Liste sollen halt die Titel die danach kommen angezeigt werden.

    Aber für deine Hilfe schon mal ein ganz fettes Danke.


    Lg

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

    VB.NET-Quellcode

    1. For Each Line In IO.File.ReadAllLines(Datei, System.Text.Encoding.UTF8).Skip(1)
    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.