Txt Datei bearbeiten
-
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 vonEOF
kein gültiges Zeichen sein darf, weil das Konzept sonst nicht funktionieren würde. Also darfEOF
kein gültigerchar
-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. Einchar
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