Benutzer mit den meisten Antworten
Bestimmte Zeile einer Textdatei löschen

Frage
-
Hallo,
ich habe folgendes Problem:
Ich habe eine Listbox mit Einträgen, die in einer Textdatei stehen (Jede Zeile in der Datei entspricht ein Eintrag in der Liste). Nun möchte ich bei EINER ausgwählten Zeile in der Listbox und einem bestätigen mit einem Button den Eintrag in der Datei löschen.
Ich habe zwar schon probiert, ein zeilenweises Einlesen der Datei, aber so richtig zum Ziel bin ich nicht gekommen.
Vielen Dank
- Typ geändert Tom Lambert (Koopakiller)Moderator Dienstag, 27. Mai 2014 13:00
Antworten
-
Hi,
vorausgesetzt, die Einträge in der Datei sind eindeutig (zB "eins", "zwei", "drei", "vier"), könntest du folgendermaßen vorgehen:
var selectedText = "drei"; // hier den tatsächlich ausgewählten Wert eintragen var fileName = "..."; // der Name deiner Datei var unselectedLines = from line in File.ReadAllLines(fileName).Where(l => l != selectedText) select line; File.WriteAllLines(fileName, unselectedLines);
Das ergibt eine Datei, die alle Zeilen außer "drei" enthält. Die mittlere LINQ-Anweisung übernimmt dabei das Einlesen der Datei und das Aussortieren der Zeile mit dem ausgewählten Text (es wird also eine neue Texte-Liste ohne den betroffenen Wert erstellt). Die verbleibenden Texte werden zeilenweise in die Datei (zurück)geschrieben.
Zum besseren Verständnis habe ich Prüfungen, ob die Datei existiert, ob sie beschreibbar ist usw. weggelassen.
Wenn du noch Erläuterungen brauchst, sag Bescheid.
Gruß
Jürgen- Als Antwort markiert noob81 Dienstag, 27. Mai 2014 13:42
Alle Antworten
-
Hi,
vorausgesetzt, die Einträge in der Datei sind eindeutig (zB "eins", "zwei", "drei", "vier"), könntest du folgendermaßen vorgehen:
var selectedText = "drei"; // hier den tatsächlich ausgewählten Wert eintragen var fileName = "..."; // der Name deiner Datei var unselectedLines = from line in File.ReadAllLines(fileName).Where(l => l != selectedText) select line; File.WriteAllLines(fileName, unselectedLines);
Das ergibt eine Datei, die alle Zeilen außer "drei" enthält. Die mittlere LINQ-Anweisung übernimmt dabei das Einlesen der Datei und das Aussortieren der Zeile mit dem ausgewählten Text (es wird also eine neue Texte-Liste ohne den betroffenen Wert erstellt). Die verbleibenden Texte werden zeilenweise in die Datei (zurück)geschrieben.
Zum besseren Verständnis habe ich Prüfungen, ob die Datei existiert, ob sie beschreibbar ist usw. weggelassen.
Wenn du noch Erläuterungen brauchst, sag Bescheid.
Gruß
Jürgen- Als Antwort markiert noob81 Dienstag, 27. Mai 2014 13:42
-
Hallo,
der Fehler meint, das l oder selectedText kein string ist. Die Meldung spricht von der rechten Seite, also wandle diese in einen String um:
var selectedTextString = selectedText.ToString(); //Benutze selectedTextString im LINQ-Ausdruck
PS: Der LINQ-Ausdruck geht auch einfacher:var unselectedLines = File.ReadAllLines(fileName).Where(l => l != selectedTextString );
Jürgen hat noch die C# Schlüsselwörter für LINQ herum gepackt, das ist nicht nötig wenn man nur die LINQ-Methoden benutzt.
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