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].