Benutzer mit den meisten Antworten
eine bestimmte zeile einlesen

Frage
-
Hallo,
ich hoffe, ihr könnt mir mal wieder helfen. Folgendes Problem:
Ich möchte aus einer Textdatei die 2. Zeile einlesen und mit dem Inhalt einer Textbox vergleichen. Ich habe schon einiges mit Streamreader und ReadAllLines ausprobiert, aber nichts hat funktioniert.
Danke schon mal im Voraus
Antworten
-
Hallo,
Dafür gibt es mehrere Möglichkeiten. Die erste Möglichkeit:using (var sr = new StreamReader(@"D:\test\lines.txt")) { sr.ReadLine();//1. Zeile lesen, Ergebnis aber nicht verarbeiten var line = sr.ReadLine();//2. Zeile lesen if (textBox1.Text == line) { MessageBox.Show("Stimmt überein!"); } else { MessageBox.Show("Unterscheiden sich!"); } }
Diese Variante ist besonders effektiv, wenn du nicht die gesamte Datei einlesen willst/musst.
Eine 2. Variante besteht darin alle Zeilen einzulesen und die 2. heraus zu suchen. Das macht aber nur Sinn, wenn du auch die gesamte Datei verarbeiten willst:
var lines = File.ReadAllLines(@"D:\test\lines.txt"); var line = lines[1];//2. Zeile auslesen //Restliche verarbeitung wie im 1. Codeblock
So in etwa sehen auch alle anderen Varianten aus. Lesiglich die Streamklassen o.ä. weichen ab.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 20. Mai 2014 22:11
- Als Antwort markiert noob81 Donnerstag, 22. Mai 2014 08:55
Alle Antworten
-
Hallo,
Dafür gibt es mehrere Möglichkeiten. Die erste Möglichkeit:using (var sr = new StreamReader(@"D:\test\lines.txt")) { sr.ReadLine();//1. Zeile lesen, Ergebnis aber nicht verarbeiten var line = sr.ReadLine();//2. Zeile lesen if (textBox1.Text == line) { MessageBox.Show("Stimmt überein!"); } else { MessageBox.Show("Unterscheiden sich!"); } }
Diese Variante ist besonders effektiv, wenn du nicht die gesamte Datei einlesen willst/musst.
Eine 2. Variante besteht darin alle Zeilen einzulesen und die 2. heraus zu suchen. Das macht aber nur Sinn, wenn du auch die gesamte Datei verarbeiten willst:
var lines = File.ReadAllLines(@"D:\test\lines.txt"); var line = lines[1];//2. Zeile auslesen //Restliche verarbeitung wie im 1. Codeblock
So in etwa sehen auch alle anderen Varianten aus. Lesiglich die Streamklassen o.ä. weichen ab.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 20. Mai 2014 22:11
- Als Antwort markiert noob81 Donnerstag, 22. Mai 2014 08:55
-
Ich versteh es nicht. Ich nehme die Variante 1. Ich weiß, das die zweite Zeile der Textbox richtig gelesen wird. Auch der Inhalt der Textbox wird korrekt angezeigt. Hab ich alles mit Messagebox.Show() kontrolliert. Ich weiß, das beide strings gleich sind (in beiden steht eine 1). Er sagt mir aber, das die beiden strings sich immer unterscheiden -> er geht immer in die else-Verzweigung. Was mach ich falsch???
-
Zeige mal bitte deine if-Anweisung.
Weiterhin soltest du einen BreakPoint im if-Abfrage-Kopf setzen. (Hinein klicken und F9 drücken.) Dadurch wird der Code bei der ausführung angehalten. Durch Zeigen auf die TextBox.Text-Eigenschaft bzw. die line-Variable erfährst du deren Wert. Poste diese Werte bitte hier.
Die Wahrscheinlichsten Ursachen sind:
- Es gibt nicht oder nur schwer sichtbare Zeichen (Leerzeichen, Zeilenumbruch, Tab, ...) in einem der Strings
- Die Groß-Kleinschreibung stimmt nicht
- 2 Zeichen ähneln sich, sind aber nicht gleich. Beispiel: "í" != "ì" != "î" != "i"
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets - Es gibt nicht oder nur schwer sichtbare Zeichen (Leerzeichen, Zeilenumbruch, Tab, ...) in einem der Strings
-
jetzt funzt es. Das Problem lag woanders. Der string, mit der ich die Textbox einlese (wird auch in einer Textdatei gespeichert) wird auch mit einem Streamreader gemacht. Dort sage ich aber, ReadtoEnd. Somit hat er zwar die erste Zeile einer Textdatei angezeigt, aber die zweite verarbeitet. Nun umgeändert in ReadLine und es funzt. Fragt mich nicht warum :-)
-
Ich kenne die genaue Konfiguration deiner TextBox nicht, somit kann ich keine definitive Aussage treffen. Ich kann aber soviel sagen, dass sich der Inhalt unterscheidet wenn der Vergleich so statt fand:
if(line == textBox1.Text)
Vielleicht ist noch ein Zeilenumbruch am Ende der 2. Textdatei (für die TextBox), weswegen dieser zwar vorhanden war, aber nicht angezeigt wurde. So etwas fällt weder bei eine MessageBox, noch bei einer nicht-Multiline-TextBox unter WinForms auf.
Da ReadLine nur eine Zeile ließt, ReadToEnd aber alles (also auch den letzten Zeilenumbruch), entsteht wahrscheinlich der Fehler.Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets