TXT Datei Auslesen und Inhalt Speichern



  • Ich will ein Programm schreiben das eine den Inhalt einer TXT Datei (Mehrere Zeilen) ausliest und dann in eine Variable speichert. Nun sollte die Datei leer sein, dann soll ein TItel eingefügt werden dann der Alte Inhalt und dann Am schluss noch ein text. leider bekomme ich das mit dem Speichern des alten Inhaltes nicht hin. also es soll im Prinzip in eine Datei unten UND oben etwas hinzugefügt werden, vllt kann man das auch anders lösen aber hier mein jetziger stand:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    char var[100];
    char name[100];
    char end[500];
    char inh[1000];
    char anf[500];
    
    FILE *datei;
    
    int i=0;
    
    int main()
    {
    	printf("\nBitte Dateinamen angeben (mit Dateiendung! z.B. *.txt): ");
    	scanf("%s", &name);
    	sprintf( var, "%s", name);
    	sprintf( end, "\n\nSchluss text");
    	sprintf( anf, "Titel\n\n");
    
    	datei=fopen(var, "r+");
    
        while (!feof(datei)) {
            fgets(inh,1000,datei);
        }
    		fprintf(datei, "%s", &anf);
    		fprintf(datei, "%s", &inh);
    		fprintf(datei, "%s", &end);
    
    	fclose(datei);
    }
    


  • fprintf(datei, "%s", &end);

    ändern in

    fprintf(datei, "%s", end);

    Genau das Gleiche mit den anderen.
    Bei "r+" bin ich mir nicht ganz sicher, ob dad funktioniert, darein zu schreiben. Benutze am Besten "r+w".



  • daran liegt es nicht, es würde ja funktionieren wenn die datei nicht mehrzeilig wäre, wenn die datei zb so aussieht:

    test test test
    test test
    test

    sieht die datei nach dem programmablauf so aus:

    test test test
    test test
    testtitel

    test

    Schluss

    man könnte jede zeile in ein eigenes array schreiben, aber ich wüsste jetzt nicht wie ich das realisieren sollte

    und der Inhalt soll ja nachdem einlesen gelöscht werden sodass er nicht mehr am anfang bei der ausgabedatei steht



  • keiner ne idee 😞 ?



  • binär mit fread & fwrite



  • Ich werde mal versuchen zu erklären was du da eigentlich machst.
    Zuerst öffnest du die datei im lese und schreibmodus ( fopen(var, "r+"); ).
    Dann liest du in einer Schleife immer wieder eine Zeile in Variable inh bis eof erreicht ist. In inh steht jetzt die letzte gelesene Zeile, der Filepoiner steht jetzt am Ende der Datei.
    Jetzt schreinst du den Header in die Datei ( wird also hinten angehängt ).
    Dann schreibst du den Inhalt Variable inh. ( also die letzte Zeile der ursprünglichen Datei )
    Und dann noch den Schluss.

    Du hast 2 Möglichlkeiten (wahrscheinlich noch mehr).
    Entweder du verwendest zwei Dateien. Eine zum lesen die andere zum schreiben. In die zweite Datei schreibst du erstmal den Header, Dann liest du mit fgets die erste Datei und schreibst die gelesene Zeile gleich wieder in die zweite Datei.
    Am Ende schreibst du noch den Schluss.
    Oder du liest erst mal die gesamte Datei in einen Buffer. Schliesst die Datei dann wieder und öffnest sie nochmals im "w"-modus und schreibst den Header, den Inhalt der originalen Datei und dann noch den Schluss.
    Kurt

    Kurt



  • Nur so gefragt, warum sind alle deine Variablen global? Nicht grade der Übersicht dienlich und für größere Programme später gänzlich ungeeignet 😉 (also alle global zu machen)



  • ZuK schrieb:

    ... Oder du liest erst mal die gesamte Datei in einen Buffer ...

    und wie mach ich das.. ?



  • Z.b. zeilenweise mit fgets in ein 2d-array



  • habs nun anders gelöst, umständlich und unüblich aber es erfüllt seinen zweck also reicht es mir ^^


Anmelden zum Antworten