Datei öffnen und in neuer Datei abspeichern



  • Hallo,

    ich brauche Hilfe bei einem Programm. Ich will aus einem Programm (zahlen.txt) Zahlen auslesen, sie umrechnen und dann in einer neuen Datei (neuezahlen.txt) abspeichern. Ich habe es geschafft dass mein Programm die Zahlen ausließt und dann umrechnet, was auch funktioniert ich kann mir die Zahlen ausprinten lassen. Mein Problem ist jetzt, dass die Zahlen die ich umgerechnet habe nicht in meinem neuen Programm gespeichert werden. Um genauer zu sein wird nur die letzte Zahl im Programm gespeichert. Ich verstehe nicht warum er nur die letzte Zahl in die neue Datei schreibt und nicht alle Zahlen, obwohl ich mir alle Zahlen ausprinten lassen kann. Kann mir jemand helfen?

    Danke im Vorraus 😃

    Die Main Datei ist:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main() {
    
    FILE *fp;
    int i, temp, j;
    // öffnen im Lesemodus
    fp = fopen("zahlen.txt", "r");
    
    if(fp == NULL) {
        printf("Datei konnte nicht geöffnet werden.\n");
    } else {
        for(i = 0; i < 100; i++) {
            fscanf(fp, "%d\n", &temp);
            temp = temp / 3;
            temp = temp - 2;
            
            FILE *datei;
            //öffnen im Schreibemodus
            datei = fopen("neuezahlen.txt", "w");
            
            if(datei == NULL) {
                printf("Datei konnte nicht geöffnet werden.\n");
            } else {
                for(j = 0; j < 1; j++) {
                    //printf("%d\n", temp);
                    fprintf(datei, "%d\n", temp);
                }
                fclose(datei);
            }
        }
        fclose(fp);
      }
    }
    

    zahlen.txt:

    131787
    116597
    71331
    101986
    56538
    105039
    119405
    87762
    113957
    69613
    

    ...
    usw. das sind insgesamt 100 Zahlen, aber die Anzahl ist eigentlich unwichtig das müsste mit beliebig vielen Zahlen gehen.


  • Mod

    Du machst die neue Datei bei jeder Zahl neu auf (und überschreibst sie dabei). Mach das halt nicht, sondern öffne beide Dateien nur einmal gleichzeitig. Solltest du an so etwas wie for(j = 0; j < 1; j++) nicht selber merken, dass dein jetziges Programm Quatsch ist? Das macht doch keinen Sinn so.

    Vielleicht willst du wirklich nur genau 100 Werte kopieren, aber die übliche Art und Weise, um "alle" Werte aus einer Quelle auszulesen, wäre einfach so lange zu lesen wie es geht und jeweils den Erfolg jeder Leseaktion zu prüfen (Rückgabewert von scanf!). also ungefähr so:

    while(fscanf(fp, "%d", &value) == 1)
    {
      // Wert verarbeiten
    }
    

    Beachte auch, dass ich in obigem Ansatz das falsche \n aus dem Formatstring entfernt habe. scanf ist nicht das Gegenteil von printf. Lies dir unbedingt die Dokumentation beider Formatstrings genau durch!
    value ist zwar auch ein Allerweltsbezeichner, aber immer noch besser als temp. Gib deinen Dingen vernünftige, sprechende Namen, keine Wegwerfbezeichner! i, temp, fp, datei, j. Total inkonsistent.



  • @SeppJ Danke für deinen Tipp, jetzt läuft alles.


Anmelden zum Antworten