Output statt auf Bildschirm in Datei schreiben



  • Hallo,

    ich wollte ein Programm schreiben, das z.B. in einer HTML-Datei alle ö durch ö ersetzt.
    Aus Datei einlesen und dann auf den Bildschirm ausgeben ist kein Problem, aber ich hab's nicht hingekriegt, in die Datei zurück zu schreiben.

    So sieht's im Moment aus:

    #include <stdio.h>
    
    int main()
    {
        char c;
        FILE *fp;
    
        fp = fopen("test.html", "r");
    
        while((c = getc(fp)) != EOF) {
        	switch(c) {
            	case 'ä': printf("&auml;"); break;
               	case 'ö': printf("&ouml;"); break;
    	        case 'ü': printf("&uuml;"); break;
    	        case 'Ä': printf("&Auml;"); break;
    	        case 'Ö': printf("&Ouml;"); break;
    	        case 'Ü': printf("&Uuml;"); break;
    	        case 'ß': printf("&szlig;"); break;
    	        default: putchar(c);
    	    }
        }
    
        fclose(fp);
    	return 0;
    }
    

    Wie kann ich das jetzt in die Datei zurück schreiben statt auf den Bildschirm?

    Danke schonmal
    ozzyrocks



  • nutze die Funktion fprintf() bzw fputc()



  • Also irgendwie klappt es nicht so recht.
    Vielleicht stelle ich mich auch bloß zu blöd an ...

    So sieht es jetzt mit fprintf() und fputc() aus:

    #include <stdio.h>
    
    int main()
    {
        char c;
        FILE *fp;
    
        fp = fopen("test.html", "r+");
    
        while((c = getc(fp)) != EOF) {
            switch(c) {
                case 'ä': fprintf(fp, "&auml;"); break;
                case 'ö': fprintf(fp, "&ouml;"); break;
                case 'ü': fprintf(fp, "&uuml;"); break;
                case 'Ä': fprintf(fp, "&Auml;"); break;
                case 'Ö': fprintf(fp, "&Ouml;"); break;
                case 'Ü': fprintf(fp, "&Uuml;"); break;
                case 'ß': fprintf(fp, "&szlig;"); break;
                default: fputc(c, fp);
            }
        }
    
        fclose(fp);
        return 0;
    }
    


  • du musst schon ne neue datei erstellen, so geht das nicht...



  • Und wenn ich es in der gleichen Datei ersetzen wollte, müsste ich sie vorher temporär kopieren?

    So hab ich's jetzt (ohne kopieren):

    #include <stdio.h>
    
    int main()
    {
        char c;
        FILE *fp, *fp2;
    
        fp = fopen("test.html", "r");
        fp2 = fopen("test_neu.html", "w");
    
        while((c = getc(fp)) != EOF) {
            switch(c) {
            	case 'ä': fprintf(fp, "&auml;"); break;
                    case 'ö': fprintf(fp, "&ouml;"); break;
    	        case 'ü': fprintf(fp, "&uuml;"); break;
    	        case 'Ä': fprintf(fp, "&Auml;"); break;
    	        case 'Ö': fprintf(fp, "&Ouml;"); break;
    	        case 'Ü': fprintf(fp, "&Uuml;"); break;
    	        case 'ß': fprintf(fp, "&szlig;"); break;
    	        default: fputc(c, fp2);
    	    }
        }
        fclose(fp);
        fclose(fp2);
        return 0;
    }
    

    Funktioniert aber immer noch nicht.
    Z.B. aus "Württemberg" sollte ja "Württemberg" werden, es wird aber "Werg".
    Ich habe keine Ahnung.

    EDIT:
    Ich habe statt nach fp2 nach fp geschrieben (in Source-Code oben ist der Fehler noch zu sehen).
    Es funktioniert jetzt.
    Bleibt aber immer noch die Frage von oben:
    Und wenn ich es in der gleichen Datei ersetzen wollte, müsste ich sie vorher temporär kopieren?


Anmelden zum Antworten