2017-10-29 2 views
3

Ich habe ein Problem mit dem Schreiben von Zeichenfolgen in eine TXT-Datei. Meine Zeilen werden jedes Mal überschrieben. Ich verwende
gcc -Wall -o filename filename.c, um zu kompilieren und ./filename 10 Berlin cat resultat.txt auszuführen. Die TXT-Datei hat immer nur eine Zeile (die letzte), wie kann ich alle Datensätze speichern.Kann nicht schreiben in eine Textdatei mit for Schleife in c

Ich habe eine CSV-Datei mit Städtenamen und eine Anzahl von Einwohnern, ich muss für den Namen der Stadt und ein Minimum von Einwohnern filtern.

Was ich bisher versucht: gibt mir

..... 
void write_file(char *result[], int len) { 
    FILE *fp = fopen("resultat.txt", "w"); 
    if (fp == NULL){ 
     perror("resultat.txt"); 
     exit(1); 
    } 
    for (int i=0; i<len; i++) { 
     fprintf(fp, "%s\n", result[i]); 
    } 
    fclose(fp); 
} 

int main(int argc,char **argv) { 

    int anzahl = atoi(argv[1]); 
    char *string_array[100]; 

    char *erste_zeile; 
    erste_zeile = (char *) malloc(1000 * sizeof(char)); 

    char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR]; 
    char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR]; 
    int bewohner[MAX_LAENGE_ARR]; 

    int len = read_file("staedte.csv", staedte, laender, bewohner); 
    for (int i = 0; i < len; ++i){ 
     if (strcmp(argv[2],laender[i])==0 && anzahl < bewohner[i]){ 
      snprintf(erste_zeile, 100,"Die Stadt %s hat %d Einwohner\n",staedte[i],bewohner[i]); 

      string_array[0] = erste_zeile; 
      // counter++; 
      write_file(string_array,1); 
     } 
    } 

    free(erste_zeile); 
    return 0; 
} 

Mit der write_file() Funktion außerhalb der for-Schleife null Werte. Wenn jemand eine Idee hat, wie man den Code optimiert, hinterlasse bitte einen Kommentar oder antworte.

+0

Es ist besser, die Datei nur vor der Schleife zu öffnen und nach der Schleife zu schließen. – Serge

Antwort

4

Jedes Mal, wenn Sie FILE *fp = fopen("resultat.txt", "w"); verwenden, was dies tut, löschen Sie die vorhandene Datei und erstellen Sie eine leere Datei zum Schreiben. Was Sie suchen, ist FILE *fp = fopen("resultat.txt", "a"); //a not w!. Dies öffnet die vorhandene Datei und fügt Inhalte hinzu. Wenn eine Datei nicht existiert, wird eine Datei erstellt. Siehe this reference.

"w" - Erstellt eine leere Datei zum Schreiben. Wenn bereits eine Datei mit demselben Namen existiert, wird ihr Inhalt gelöscht und die Datei wird als neue leere Datei betrachtet.

"a" - Hängt an eine Datei an. Schreibvorgänge, fügen Sie Daten am Ende der Datei an. Die Datei wird erstellt, wenn sie nicht existiert.

Beachten Sie auch @ Serge Ratschlag über das Öffnen der Datei für jeden Datensatz. Öffnen Sie es einfach einmal in der main und verwenden Sie den Dateizugriffspunkt, um darauf zu schreiben. Damit der aktuelle Code funktioniert, können Sie Folgendes tun:

void write_file(char *result[], int len) { 
    FILE *fp = fopen("resultat.txt", "a");//open for append 
    if (fp == NULL){ 
     perror("resultat.txt"); 
     exit(1); 
    } 
    for (int i=0; i < len; i++) { 
     fprintf(fp, "%s\n", result[i]); 
    } 
    fclose(fp); 
} 
+0

Vielen Dank, Ihre Erklärung hat mir sehr geholfen! – Marla

Verwandte Themen