Txt Datei bearbeiten



  • c.nub schrieb:

    Habe in meinem Code das ersetzt und jetzt kommt bei mir eine Fehlermeldung von Visual Studio:
    Unbehandelte Ausnahme bei 0x77657dd2 in 'backslash n nach jedem zeichen.exe'

    ^^zeig mal den code...
    🙂



  • #include <stdio.h>
    void main (void)
    {
    	FILE *lfn;
    	char c;
    	int i = 0;
    	lfn = fopen ("C:\\Users\\Cem\\Desktop\\Desktop\\Documents\\Visual Studio 2008\\Projects\\backslash n nach jedem zeichen\\backslash.txt","r");
        if (!lfn)
        {
    		printf ("Datei konnte nicht geoeffnet werden!");
        }
    	while (!feof(lfn))
                {
    				c = fgetc(lfn);
    				printf("%c\n", c); // hier fprintf? --> fehlermeldung
                }
    getch();
    }
    


  • c.nub schrieb:

    printf("%c\n", c); // hier fprintf? --> fehlermeldung

    du musst natürlich vorher eine date aufmachen, wo's rein soll. z.b. so:

    FILE *newfile = fopen ("c:\\out.txt", "w");
    if (newfile == 0)
      exit (-1);  // datei konnte nicht angelegt werden
    ...
    // und dann ...
    if (fprintf (newfile, ...) < 0)
      exit (-2);  // fehler beim schreiben in die datei
    ...
    // am schluss dann ...
    fclose (newfile);
    

    🙂



  • c.nub schrieb:

    #include <stdio.h>
    void main (void)
    {
    	FILE *lfn;
    	FILE *outfile;
    	char c;
    	int i = 0;
    	lfn = fopen ("C:\\Users\\Cem\\Desktop\\Desktop\\Documents\\Visual Studio 2008\\Projects\\backslash n nach jedem zeichen\\backslash.txt","r");
    	outfile = fopen ("C:\\Users\\Cem\\Desktop\\Desktop\\Documents\\Visual Studio 2008\\Projects\\backslash n nach jedem zeichen\\backslash.txo","w");
        if (!lfn)
        {
    		printf ("Datei konnte nicht geoeffnet werden!");
        }
    	while (!feof(lfn))
                {
    				c = fgetc(lfn);
    				fprintf(outfile, "%c\n", c); // hier fprintf? --> fehlermeldung
                }
    fclose(lfn);
    fclose(outfile);
    getch();
    }
    

    sollte tun.
    Edit: Sorry, closen vergessen 😉



  • Danke pointerchrash.
    Ich habe auch überreagiert, tut mir leid.

    In meiner txt Datei steht: backslash
    Nachm ausführen steht nur noch ein Sonderzeichen: ÿ



  • Ganz locker:
    In WELCHER Datei steht was? Eingabe- und Ausgabedatei bitte angeben (nötigenfalls kürzen).



  • Es soll in der selben Datei gearbeitet werden.
    Also in der Datei "backslash.txt" steht "backslash"
    Nach der Bearbeitung soll in der selben Datei das hier in der Datei stehen:
    b
    a
    c
    k
    s
    l
    a
    s
    h

    *edit*
    Wenn man nicht in der selben Datei arbeiten kann, soll es in einer anderen Datei gearbeitet werden und dann rüber kopiert werden, da weiss ich wiederum nicht wie das geht.



  • Ahja, erstmal muß es int c; heißen, weil:
    int fgetc(FILE *stream);



  • c.nub schrieb:

    Wenn man nicht in der selben Datei arbeiten kann, soll es in einer anderen Datei gearbeitet werden und dann rüber kopiert werden, da weiss ich wiederum nicht wie das geht.

    In dieselbe Datei arbeiten geht nicht, weil Dir der Platz fehlt (Du fügst ja "\n"s hinzu. Also in die ".txo"- Datei reinwursteln, die alte "txt" mit remove töten, dann mit rename den neuen auf den alten Dateinamen setzen. Alles klar? 😉

    Edit: Bin mit neu und alt schon durcheinander 😕



  • Ok, ich kenne diese ganzen Befehle garnicht, aber ich werde es probieren, hört sich garnich so schwer an...
    Hoffentlich kommt sowas zum Test dann kann ich angeben xD



  • remove("C:\\Users\\Cem\\Desktop\\Desktop\\Documents\\Visual Studio 2008\\Projects\\backslash n nach jedem zeichen, in der txt datei\\backslash.txt");
    

    Zeigt mir keine Fehler an, aber es wird nix gelöscht.
    Wie funktioniert rename?
    *edit* Habe rename probiert - keine Fehler funktioniert wieder nicht.

    rename("C:\\Users\\Cem\\Desktop\\Desktop\\Documents\\Visual Studio 2008\\Projects\\backslash n nach jedem zeichen, in der txt datei\\backslash.txo", "backslash.txt");
    

    Habe die TFO datei mal im Editor geöffnet, da steht das richtige drinnen naja... plus dem Sonderzeichen am Ende...

    Edit: ooops ich habe die Links nicht gesehn, tut mir leid xD
    Dachte ist nur unterstrichen



  • #include <stdio.h>
    int main (void)
    {
        FILE *lfn;
        FILE *outfile;
        int c;
        int i = 0;
        lfn = fopen ("backslash.txt","r");
        outfile = fopen ("backslash.txo","w");
        if (!lfn)
        {
            printf ("Datei konnte nicht geoeffnet werden!");
        }
    	else
    	{
        	while (!feof(lfn))
                {
                    c = fgetc(lfn);
    				if (c != EOF)
                    fprintf(outfile, "%c\n", (char)c); // hier fprintf? --> fehlermeldung
                }
    		fclose(lfn);
    		fclose(outfile);
    		remove("backslash.txt");
    		rename("backslash.txo", "backslash.txt");
    	}
    // getch();
    }
    

    Bitte über die Änderungen nachdenken. 😉



  • pointercrash() schrieb:

    if (c != EOF)
                    fprintf(outfile, "%c\n", (char)c);
    }
    

    Bitte über die Änderungen nachdenken. 😉

    Also gut, danke erstmal.
    Ich seh mir schnell den Link an, warum c als int deklariert wird, weil das check ich nicht. Haben wir noch nie so verwendet, weil man kann doch einer interger Variable ein Zeichen zuweisen. Oder wird da der ASCI-Code zugewiesen?
    (char)c habe ich auch noch nicht gelernt, ist aber logisch, also hier wird es dann zum schreiben (denke ich) vom ASCI-Code in ein Char umgewandelt und so geschrieben.
    Edit: Habs gerade ohne dem (char) vor dem c versucht, geht genauso, anscheinend wird es dann automatisch umgewandelt.



  • Uhm, habe ich recht?
    Ich will schon wissen wie das Programm funktioniert.^^



  • Ein char ist auch nur eine ganze Zahl. Kannst du ausprobieren: zB ist '0' nur eine andere Art, um 48 zu sagen. Solche Zeichen-Konstanten könntest du auch konsequent durch Zahlenangaben ersetzen, wenn wir Stilfragen einmal ausklammern.

    fgetc() und Freunde geben das Zeichen in einem int zurück. Das liegt erstmal daran, dass der Wert von EOF kein gültiges Zeichen sein darf, weil das Konzept sonst nicht funktionieren würde. Also darf EOF kein gültiger char -Wert sein.

    Darüber hinaus ist ein int dafür gedacht, für die normale Wortgrösse der Maschine zu stehen (fricky hat angemerkt, dass 8-Bitter eine Ausnahme sind). Ohne mich da sonderlich auszukennen, glaube ich nicht, dass man deshalb eine Ineffizienz fürchten muss.

    (char)c habe ich auch noch nicht gelernt, ist aber logisch, also hier wird es dann zum schreiben (denke ich) vom ASCI-Code in ein Char umgewandelt und so geschrieben.
    Edit: Habs gerade ohne dem (char) vor dem c versucht, geht genauso, anscheinend wird es dann automatisch umgewandelt.

    So ist es. char 's sind eben auch nur Zahlen. Deshalb macht es keinen Sinn, davon zu reden, dass ein ASCII-Code in ein Char umgewandelt wird. Ein char ist eben ein kleiner Zahlen-Typ (normalerweise genau 1 Byte gross), das den Code (normalerweise ASCII-Code) des Zeichens enthält. Mehr ist da nicht dran. Alles klar?



  • c.nub schrieb:

    Haben wir noch nie so verwendet, weil man kann doch einer interger Variable ein Zeichen zuweisen. Oder wird da der ASCI-Code zugewiesen?
    (char)c habe ich auch noch nicht gelernt, ist aber logisch, also hier wird es dann zum schreiben (denke ich) vom ASCI-Code in ein Char umgewandelt und so geschrieben.

    Integer bei fgetc, weil erforderlich, um EOF prüfen zu können. Im fprintf (char) vor c, um explizit zurückzuwandeln, das ist ein Typecast (von int nach char), der eigentlich nicht erforderlich sein sollte, aber klarmacht, was passiert. Ich halte das für pädagogisch sinnvoller als auf implizite casts zu wetten, das geht immer wieder mal schief.
    Ein else auf Zeile 14 hab' ich Dir auch noch untergeschoben ...

    So, und für heut' ist für mich Schicht im Schacht, musst Du auf andere hoffen, ich hock' mich mit mit einer Panetela und 'ner Buddel Scotch vor die Glotze.



  • Danke an euch beide, verstehe es jz halbwegs, werde mir noch einiges darüber durchlesen.

    Schönen Abend noch
    c.nub


Anmelden zum Antworten