Buchstaben in Datei erstezen



  • Könntet Ihr da mal drüber sehen? Also das ganze soll die gefundenen 'a' s in einer Textdatei durch X ersetzen.

    Es funktioniert, aber ich glaube das ist ziemlich umständlich so??

    int main(int argc, char *argv[]) {
    
    	FILE *fp;
    	fp=NULL;
    
    	size_t siz;
    	int i=0, j, c, here1, here;
    
    	fp=fopen("test.txt", "r+");
    	if(!fp){
    		puts("error opening file");
    		exit(0);
    	}
    
    	while (!feof(fp)){
    		  c=fgetc(fp);
    		  here1=ftell(fp);
    		if (c == 'a'){
    			here=here1-1;
    			i++;
    			fseek(fp, here, SEEK_SET);
    			fputc('X', fp);
    			fseek(fp, here1, SEEK_SET);
    		}
    		putchar(c);       
    
    	}
    
    	fclose(fp);
    	printf(" \n %d -a gefunden", i);
    	return 0;                                                 
    }
    


  • Das mit dem while (!feof(fp)){ geht so nicht, da du EOF erst nach einer Leseoperation feststellen kannst.
    Darum:

    while ((c=fgetc(fp)) != EOF){
    

    dann aber kein weiteres fgetc mehr.

    Auf das ftell kannst du auch verzichten, da du bei fseek auch relativ zur aktuellen Position arbeiten kannst.

    fseek(fp, -1, SEEK_CUR);
      fputc('X', fp);
      fseek(fp, 0, SEEK_CUR);
    

    Meist schreibt man aber in eine neue Datei, löscht dann die Originaldatei und benennt die neu Datei um.
    So gehen bei einem Fehler keine Daten verloren.



  • Besten Dank, das waren eigentlich genau die Sachen die ich wissen wollte!


Anmelden zum Antworten