Txt Datei bearbeiten
-
c.nub schrieb:
Aber das wird eben nur in der Ausgabe gemacht. Was muss man tun um die txt Datei direkt zu bearbeiten?
einfach eine neue datei aufmachen, und die ausgabe da reinschreiben. wenn du jetzt z.b. mit 'printf' arbeitest, einfach durch 'fprintf' ersetzen.
-
pointercrash() schrieb:
c.nub schrieb:
Hey
Ich bins wieder
Also ich habe ein kleines Programm geschrieben, welches aus einer txt Datei liest, und nach jedem Zeichen ein Enter macht, bzw ein \n
Aber das wird eben nur in der Ausgabe gemacht. Was muss man tun um die txt Datei direkt zu bearbeiten?
Haben es gelernt *edit* und vergessen^^ /edit, aber genau das Programm ist auf dem Schul-PC, weil mein Notebook einen Aussetzer hatteDeutsch, haben es gelernt *edit* und vergessen. Scheisendreck, was nu?
Suchsu rund um fopen, fgetc, fread und fwrite, guckst Du http://man.cx/. Voll krass, was?Woahh so schlimm, einen Link zu posten, den einer nich kennt, und dumm rum meckern und sich aufführen wie der beste Comedian.
Eigentlich würd ich mich ja bei so einem wie dir nicht rechtfertigen, aber umzu zeigen wie hirnlos du eigentlich bist, werde ich es doch tun.
Ich habe normal gefragt und eine normale Antwort erwartet.
Ich = Neuling
Du = Wichtigsteller
fwrite + fread haben wir nicht gelernt.
Ich dachte mit fopen öffnet man nur, und bearbeitet nicht. Tut mir leid, dass ich noch nich soviel weiß, wie du mit deinen 1000 Beiträgen.
Ich wusste eben nicht nach was ich suchen soll. Tut mir leid.Geht das nicht einmal, in einem Theard keinen Post zu bekommen wo dumm rumgemeckert wird?
Sit down.
-
c.nub schrieb:
Geht das nicht einmal, in einem Theard keinen Post zu bekommen wo dumm rumgemeckert wird?
Sit down.bleib geschmeidig, der pc() ist eigentlich ein sehr sympathischer typ mit viel humor. die richtigen wichtigtuer hier hast du doch noch garnicht kennengelernt.
-
;fricky schrieb:
c.nub schrieb:
Aber das wird eben nur in der Ausgabe gemacht. Was muss man tun um die txt Datei direkt zu bearbeiten?
einfach eine neue datei aufmachen, und die ausgabe da reinschreiben. wenn du jetzt z.b. mit 'printf' arbeitest, einfach durch 'fprintf' ersetzen.
Danke, aber... eine neue Datei aufmachen? Verstehe ich nicht so ganz.
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'
Ich kann auf Unterbrechen und Weiter klicken... Wenn ich auf weiter klicke kommt das selbe Fenster wieder - keine Wirkung
Habe sicher etwas falsch verstanden, aber wasGruß
c.nub
-
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 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.