StreamReader-ReadLine() --> in Array speichern?



  • Hallo,
    ich möchte eine TextDatei zeilenweise einlesen, und jede Zeile in einer Variable speichern, so habe ich es mir gedacht:

    // Zeilen ist eine int-Variable, die anzeigt wieviele Zeilen die Textdatei hat
    // Das StreamReader-Objekt heißt lesen
    // Der string-Array heißt buffer und hat so viele Felder, wie es Zeilen gibt
    for (int loop = 0; loop <= Zeilen; loop++)
    {
    while (lesen.ReadLine() != null)
    {
    buffer[loop] = lesen.ReadLine();
    }
    }
    

    [code="cs"]
    Es funktioniert nicht, Auf der Konsole wird nichts ausgegeben, wenn
    ich Console.WriteLine(buffer[0]); eingebe, obwohl die Textdatei gefüllt ist.



  • Hallo,

    folgendes Beispiel sollte dir weiterhelfen (Ursprung von MSDN Seite)

    string line;
    List<string> lines = new List<string>();
    using(System.IO.StreamReader file = 
        new System.IO.StreamReader(@"c:\test.txt"))
    {
    	while((line = file.ReadLine()) != null)
    	{
    		lines.Add(line);
    	}
    	file.Close();
    }
    

    Danach hast du jede Zeile in der Liste lines drinstehen.



  • Danke.
    Das MSDN-Beispiel kenne ich, und deswegen wundere ich mich auch, dass mein Code nicht funktioniert, liegt es daran, dass ich den Nullwert in eine Variable speichern muss, wie im MSDN-Beispiel also string line?
    Ich schaue mir nun die List-Klasse genauer an.



  • Warum nicht Einfach

    string[] bla = File.ReadAllLines("datei.txt");
    


  • Hallo Newb2134,

    verstehst du überhaupt deinen eigenen Code? Doppelte Schleife, doppeltes ReadLine - das macht einfach keinen Sinn.



  • Ja, halbwegs. Ich weiss, mein Ansatz ist ziemlich komisch.
    Ich habe auch eine Frage:
    Da ich 2 mal ReadLine verwendet habe, das 1. Mal im While-Schleifenkopf, und das 2. Mal zum abspeichern des Wertes, ist der 2.Aufruf nur ein Verweis auf den ersten, also die Methode wird nicht 2 Mal parallel ausgeführt (?).
    Hab's nun geschafft, in dem ReadLine() nochmals in einem String speichere, und dieser String den Array durchläuft.



  • Newb2134 schrieb:

    Da ich 2 mal ReadLine verwendet habe, das 1. Mal im While-Schleifenkopf, und das 2. Mal zum abspeichern des Wertes, ist der 2.Aufruf nur ein Verweis auf den ersten, also die Methode wird nicht 2 Mal parallel ausgeführt (?).

    Ich verstehe deinen Satz nicht wirklich. Was du machst ist aber zuerst eine Zeile (im while-Kopf) und anschließend eine weitere Zeile auszulesen. Sprich in jedem Schleifendurchlauf werden 2 Zeilen gelesen, und die 2te dem buffer zugeordnet.

    Parallel ist da nichts, das wird sequenziell abgearbeitet.



  • Ok, danke für die Info.
    Ich habe nun eigentlich mein Programm fertig geschrieben,
    habe nun aber beim Einlesen mehrzeiliger Textdateien Probleme:

    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Hier ein Screenshot, mit dem ihr hoffentlich was anfangen könnt:
    http://i.imgur.com/qQsFrU0.png



  • ich schätze mal durch die doppelte schleife beim einlesen wird nur an die erste stelle von buffer etwas geschrieben



  • Ok, danke.
    Ich habe nun eine viel einfachere Methode kennengelernt:
    // Pro Zeile ein Feld des Arrays
    string[] lines = System.IO.File.ReadAllLines(@"C:\MeineDatei.txt");
    // Anzahl der Zeilen über .lenght herausgefunden
    int Zeilen = lines.lenght;
    Ist wesentlich einfacher, und damit auch fehlerfreier [von potenziellen Fehlern].


Anmelden zum Antworten