Textzeile aus Datei löschen?
-
Habe da noch ein Problem! Und zwar wollte ich wissen, wie man in einer Textdatei eine bestimmte Zeile löscht!?
Beispiel: In einer Variable steht "test", jetzt soll die komplette Datei durchsucht werden und jede Zeile, in der "test" steht soll gelöscht werden!Weiss da jemand weiter? Habe versucht den Text in eine Variable zu speichern und es da heraus zu löschen, jedoch habe ich das nicht hinbekommen
THX
-
PranKe01 schrieb:
Habe da noch ein Problem! Und zwar wollte ich wissen, wie man in einer Textdatei eine bestimmte Zeile löscht!?
Beispiel: In einer Variable steht "test", jetzt soll die komplette Datei durchsucht werden und jede Zeile, in der "test" steht soll gelöscht werden!Weiss da jemand weiter? Habe versucht den Text in eine Variable zu speichern und es da heraus zu löschen, jedoch habe ich das nicht hinbekommen
THX
Ich würde das so machen:
Zeile für Zeile von der Quelldatei einlesen und in eine neue Datei schreiben, findet das Programm das gesuchte Wort in der zuvor ausgelesenen Zeile, wird die Zeile nicht in die neue Datei geschrieben.
Ist die Abarbeitung beendet, haste eine neue Datei, in denen die Zeilen mit dem definierten Schlüsselwort fehlen.Alternativ kannst du die Zeilen in ein CStringArray schreiben und nach dem Auslesevorgang den Inhalt in die bestehende Datei (über)schreiben.
-
Kannst du mir sagen, wie ich das mit dem CStringArray hinbekomme? Habe noch nie damit gearbeitet... Danke!
-
Hast du schon mal mit einem CArray gearbeitet? CStringArray ist nichts anderes als CArray<CString, CString>
-
PranKe01 schrieb:
Kannst du mir sagen, wie ich das mit dem CStringArray hinbekomme? Habe noch nie damit gearbeitet... Danke!
Also zuerst liest du Zeichen von der Quelldatei ein und schreibst es in einen CString. Prüfe auf das Zeilenende ('\n'). Falls das Zeilenende erreicht ist, fügst du den CString (1 Zeile) dem CStringArray hinzu .
CStringArray saData; saData.Add(sZeile);
Wenn das Dateiende erreicht ist, hast du ein CStringArray mit all deinen Strings drinnen.
Zugriff erfolgt mittels 'saData.GetAt(iZeilenNummer)'.Alles Klar? hier ein Beispiel:
Hier ein Codeschnipsel
CStringArray saFile; bool bRun = true; while(bRun){ CString sIn; c = fgetc(pMyFile); sIn.Insert(sIn.GetLength()+1, c); if(c=='\n'){ saFile.Add(sIn); sIn = ""; } if(c==EOF){ saFile.Add(sIn); sIn = ""; bRun = false; } } // end while 'bRun'
-
Danke für deini Beispiel, jedoch weiss ich nicht wirklich, welchen Typ die Variable c haben soll! Haste nämlich nirgends deklariert...
Dann hätte ich noch eine Frage, wie speicher ich die einzelnen Daten wieder in eine Datei?Danke im vorraus!
-
c ist vom Typ Integer ...
Gruß
:: NoName ::
-
Hmm... Irgendwie kann das doch gar nicht funktionieren!?
CStringArray saFile; CString curdir = ".\\"; CString appname; CFileFind ftpFind; BOOL bContinue = ftpFind.FindFile(curdir + "\\*.txt"); //Da ich den Inhalt aus mehreren Dateien Lade, muss ich als jede Datei durchlaufen... while(bContinue > 0) { bContinue = ftpFind.FindNextFile(); appname = ftpFind.GetFileName(); if (appname == "." || appname == "..") {} else {} bool bRun = true;//sky21 Quellcode Anfang while(bRun) { CString sIn; c = fgetc(appname);//Was soll denn hier passieren? Muss nicht erstmal die Datei geöffnet werden und dann in appname gespeichert werden? if(c=='\n')//Wieso guckt er dann hier, ob ein Zeilenumbruch da ist? In sIn ist doch noch gar kein Wert!? { saFile.Add(sIn); sIn = ""; } if(c==EOF) { saFile.Add(sIn); sIn = ""; bRun = false; } sIn.Insert(sIn.GetLength()+1, c);//Hier kommt ein Fehler: error C2039: 'Insert' : ist kein Element von 'CString' }//sky21 Code Ende } ftpFind.Close();
Kann mir jemand helfen? Er soll eine txt Datei einlesen, nach einem bestimmtem Wort suchen, die Zeile löschen, in der das Wort steht, die Datei speichern und die nächste txt Datei öffnen und da gleiche wieder von vorne... Bin für jede Hilfe dankbar
-
Warum so kompliziert. Wir verwenden hier MFC und nicht c (fgetc)
CStdioFile::ReadString
Auch wenn nur kopiert ohne zu verstehen ist es richtig. Damit bekommt man alle Filenamen
CFileFind ftpFind; BOOL bContinue = ftpFind.FindFile(curdir + "\\*.txt"); //Da ich den Inhalt aus mehreren Dateien Lade, muss ich als jede Datei durchlaufen... while(bContinue > 0) {
Dann file öffnen mit der Klasse CStdioFile.
Mit ReadString die erste Zeile lesen. Das Zeilenende nimmt dir die Funktion ab.
Diese durchsuchen und dann schreiben.u.s.w.
-
So, hab es jetzt hinbekommen die zu löschende Zeile in eine Variable zu speichern. Wie bekomme ich es jetzt hin diese aus der Datei zu löschen? Erst muss man ja die Datei öffnen, dann jede Zeile auslesen und vergleichen. Gibt es keinen befehl, der eine Zeile löscht und dann speichert?
Wenn es geht mit Codeschnipseln, THX!