Daten suchen und löschen
-
Hallo,
ich speichere Daten in einer Datei.
$040123456
$071001>$070005
$071001+$0AT
$071001+$0B9
$071001~$0D4
$071001~$0C8
$071001-$098
$071001>$070004
$071001+$0A0
$071001+$0B0
$071001~$0D0
$071001~$0C0
$071001-$091Die Aufgabe besteht darin, nach dem letzten '>' in einer Zeile zu suchen und vom Dateiende her bis einschließlich in die'>' Zeile alles zu löschen.
Zurzeit habe ich das so umgesetzt, dass ich eine Hilfsdatei habe und dort die temporären Daten speichere.FILE * Input; FILE * Output; int anz_akt = 0; int anz_neu = 0; char buffer_in[31] = ""; Input = fopen("Text.dat","r"); Output = fopen("Tmp.dat","w"); while(fgets(buffer_in,30,Input) != NULL) { //sucht nach '>' if(strchr(buffer_in,'>') != NULL) anz_akt++; } fseek(Input,0,SEEK_SET); while(fgets(buffer_in,30,Input) != NULL) { //sucht nach '>' if(strchr(buffer_in,'>') != NULL) anz_neu++; //Daten in Datei kopieren if(anz_neu < anz_akt) fputs(buffer_in,Output); } //Abschluss der Reorganisation fclose(Input); fclose(Output); remove("Text.dat"); rename("Tmp.dat","Text.dat");
Gibt es eine Variante, in der ich diese Hilfsdatei nicht verwenden muss und gleich in der Originaldatei löschen kann?
Gruß
-
Lies die komplette Datei in einen String - Parse und bearbeite diesen String - Schließe und öffne die Datei erneut - Speichere den bearbeitet String in dieser Datei
Sicher gibt es aber elegantere Lösungen
-
Wenn WinAPI-Funktionen erlaubt sind, dann bringt dich SetEndOfFile() ganz schnell ans Ziel.
-
Nanyuki schrieb:
Wenn WinAPI-Funktionen erlaubt sind, dann bringt dich SetEndOfFile() ganz schnell ans Ziel.
und einige unixe haben das: http://man.netbsd.se/?find=ftruncate+2+30
-
WinApi hab ich nicht.