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-$091

    Die 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. 😡


Anmelden zum Antworten