Laden...

Datei zeilenweise einlesen und prüfen, ob die Zeile schon vorhanden ist

Erstellt von c#atriga vor 5 Jahren Letzter Beitrag vor 5 Jahren 886 Views
C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 5 Jahren
Datei zeilenweise einlesen und prüfen, ob die Zeile schon vorhanden ist

Habe gleich noch ein weiteres Problem, wo ich gern wüsste wo hier mein Denkfehler ist.

Eine Datei wird Zeilenweise eingelesen (ursprung.txt) .
Dann wird via Streamreader solang gelesen bis sie zu ende ist und via einer if Abfrage soll geprüft werden ob die Zeile vorhanden ist.
Mit dem ersten Wert geht es auch, doch der zweite wird gar nicht erst überprüft.

List<string> ausgabe = new List<string>();

			string datei = @"C:\Users\User\Desktop\Programme\ursprung.txt";
			StreamReader streamreader = new StreamReader(datei);
			string[] suche = new string[] { "wert1", "wert2" };

			while (!streamreader.EndOfStream)
			{
				foreach (string item in suche)
				{
					if (streamreader.ReadLine() == item)
					{
						ausgabe.Add(item);
					}
				}
			}

			

			foreach (string item in ausgabe)
			{
				Console.WriteLine(item.ToString());
			}


			streamreader.Close();

			Console.ReadKey();
		}
2.079 Beiträge seit 2012
vor 5 Jahren

Mir fällt spontan ein Problem auf:

In der foreach-Schleife rufst Du jedes Mal ReadLine auf. Das solltest Du vor der foreach-Schleife tun, sonst liest Du immer so viele Zeilen auf Einmal, wie Du Such-Strings hast.

Könnte das die Lösung sein?

Ach noch was:
Für den StreamReader solltest Du using verwenden.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 5 Jahren

So richtig verstanden habe ich es jetzt zwar noch nicht, warum immer nur soviele Zeilen abgefragt wurden wie SuchStrings vorhanden sind, allerdings war dies die Lösung.

Das ganze mit dem using werde ich mir bei Gelegenheit mal anschauen, das haben wir im Kurs (noch) nicht durchgenommen.

2.079 Beiträge seit 2012
vor 5 Jahren

Du willst doch pro Zeile alle Such-Strings suchen, oder?
Dann ist es doch nicht klug, dass dein Programm das tut:

Zeile lesen
Text1 suchen
Zeile lesen
Text2 suchen
Zeile lesen
Text1 suchen
Zeile lesen
Text2 suchen
...

Du willst:

Zeile lesen
Text1 suchen
Text2 suchen
Zeile lesen
Text1 suchen
Text2 suchen
...

Schau dir das Mal an, damit wird dir das schnell klar:
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.