Datei schnell schreiben



  • Hallo alle zusammen!

    Ich habe ein Programm, in dem ich Daten aus einer Textdatei in viele structs einlese, die von einem Pointerarray referenziert werden. Das Einlesen dauert ca. 1sek bei 1000 Datensätzen (die Geräte auf denen das läuft sind nicht soooo schnell...)

    Wenn ich nun die Daten aus den structs wieder zurück in die Datei schreiben will dauert das seeeeehr lange (> 1min). Gibt es eine Möglichkeit das zu beschleunigen??

    Hier mein Code:

    /**
     * @brief Daten in die Datei zurückschreiben
     */
    void save_data(void){
    	int i;
    	int point;
    
    	if((inv_file = fopen(INVFILE, "wt+")) == NULL){ // inv_file usw. werden extern deklariert
    		clrscr();
    		gotoxy(2,1);
    		buzz();
    		printf("Dateifehler");
    		delay(1000);
    	}
    
    	clrscr();
    
    	point = 0;
    	gotoxy(3,3);
    	printf("Daten speichern:");
    	gotoxy(3,5);
    
    	for(i=0; i<zaehlerAnzahl; i++){ // zaehlerAnzahl = Anzahl der Zeilen in der Textdatei
    
    		// Statusanzeige
    		if((i % 10) == 0){
    			if(point < 16){
    				printf(".");
    				point++;
    			} else {
    				clrscr();
    				gotoxy(3,3);
    				printf("Daten speichern:");
    				gotoxy(3,5);
    				point=0;
    			}
    		}
    
    		// Daten schreiben
    		if(lines[i]->counted == 1){
    			fprintf(inv_file, "%s %6ld %6ld %s %s %s\n",
    					lines[i]->zNr,
    					lines[i]->oldCount,
    					lines[i]->newCount,
    					lines[i]->zWeg,
    					lines[i]->stellen,
    					lines[i]->einbauort);
    		} else {
    			fprintf(inv_file, "%s %6ld %s %s %s %s\n",
    					lines[i]->zNr,
    					lines[i]->oldCount,
    					"xxxxxx",
    					lines[i]->zWeg,
    					lines[i]->stellen,
    					lines[i]->einbauort);
    		}
    	}
    
    	fclose(inv_file);
    
    }
    

    Viee Grüße,
    Chris



  • Ich würde mal vermuten, dass fwrite schneller ist als fprintf.



  • _matze schrieb:

    Ich würde mal vermuten, dass fwrite schneller ist als fprintf.

    Das ist noch eine glatte Untertreibung! 😃
    Die ganze Formatstringauswertung ist ausgesprochen lahm (kann ja auch viel) und komplett nutzlos, wenn man keine Klartextdateien braucht. Mit fread/fwrite fällt der Kram weg (Achtung Stolperdraht: Bitte nicht vergessen, die Datei mit Binary- Attribut zu öffnen, also, "wb" oder "rb") und es werden deutlich kleinere Dateien erzeugt!
    😉


Anmelden zum Antworten