Datei Liste in einer TXT Datei
-
Hiho,
ich hab noch ein Problem. Ich versuche mehrere Datein in eine zu schreiben. Ich will eine Datei Liste aus einer TXT Datei einlesen und dann bearbeiten.Hier mal das Programm, ich hoffe ich hab es auf die wichtigen Sachen beschränkt:
#include <stdio.h> #include <string.h> //strlen() void main() { FILE *files; FILE *readfile; FILE *writefile; char ch; char file; char szLine[80]={0}; int i = 3; //Die Dateiliste laden: files = fopen("files.txt", "r"); // "a" = anfügen; "w" = überschreiben; "r" = lesen if(files == 0) { printf("ERROR: Could not find files.txt!\n"); return; } //Die Ausgabedatei erstellen: writefile = fopen("ausgabe.txt", "a"); if(writefile == 0) { printf("ERROR: Konnte die Datei ausgabe.txt nicht erstellen.\n"); } while((fgetc(files)) != EOF) { while(fgets(szLine, 80, files)) printf("Versuche zu oeffnen: %s \n", szLine); readfile = fopen(szLine, "r"); if(readfile == 0) { printf("ERROR: Konnte %s nicht einlesen.\n", szLine); } while((ch = fgetc(readfile)) != EOF) fputc(ch, writefile); fputs("***END OF FILE***", writefile); } fclose(readfile); fclose(files); fclose(writefile); }
Wenn ich dann datei aus der Dateiliste laden will, geht dies nur wenn sich kein Zeilenumbruch am Ende der Zeile befindet. D.H. das einlesen kallpt nur mit der letzten Datei in der Liste und auch nur dann, wenn sich kein Enter Zeichen am Ende befindet.
Kann mir einer Sagen, wie ich das Programm verändern muss, das ich die Datein in der Liste einlesen kann?
Thx,
iuiz.
-
das schaut mir doch arg nich ANSI C aus...
-
thread verschoben ins c fourm
http://www.c-plusplus.net/ubb/cgi-bin/ultimatebb.cgi?ubb=forum&f=14
-
ups, hab im falshcen Forum gepostet,
aber wieso ist im C++ Forum der Thread zu gemacht wurden? Kann der nochmal auf? Plz.
-
Nö, hier lesen die Leute, die sich mit deinem Problem besser auskennen.
Das Interface von fgets ist etwas gewöhnungsbedürftig. Du musst das Zeilenumbruchzeichen von Hand entfernen:
char* p; if (p = strchr (line, '\n')) *p = '\0';
Außerdem solltest Du die Dateien, die Du geöffnet hast wieder schließen (Du schließt nur die letzte Datei). Außerdem sollte ch vom Typ int sein, weil EOF auch ein int ist.
while((fgetc(files)) != EOF) { while(fgets(szLine, 80, files)) printf("Versuche zu oeffnen: %s \n", szLine); readfile = fopen(szLine, "r");
Hmm, das sieht auch irgendwie inhaltlich falsch aus. Wenn man das zweite while durch ein if ersetzt könnte es passen. Aber wieso nicht einfach so:
while (fgets (line, sizeof line, files)) { char* p; FILE* f; if (p = strchr (line, '\n')) *p = '\0'; /* Entferne das '\n' */ p = line + 1; /* Zeigt auf den Dateinamen. Ignoriert das erste Zeichen */ printf ("Versuche zu oeffnen: %s \n", p); f = fopen (p, "r"); if (f) { int c; /* Kopiere f nach out. Eine Funktion copy (f, out) wäre chiquer. */ while ((c = fgetc (f)) != EOF && fputc (c, out) != EOF) ; fclose (f); } }
[ Dieser Beitrag wurde am 24.11.2002 um 16:02 Uhr von Daniel E. editiert. ]
-
danke, werd ich gleich mal ausprobieren.
"Wieso nciht einfach so?" - Hmm, weil ich ein n00b binHast mir echt geholfen, thx.
Nur:
Wieso kopierst du "f" nach "out". Und "Out" muss dann ein char Array sein, oder?//edit:
Juhu!!! Es geht!
Hier nochmal der Code, für alle, die mitgelesen haben (un**wahrscheinlich, aber für die Suche evtl. zu gebrauchen):
#include <stdio.h> #include <string.h> /* strlen() */ void main() { FILE *files; FILE *writefile; FILE *readfile; char szLine[80]={0}; char daten; int i = 3; /* Die Dateiliste laden: */ files = fopen("files.txt", "r"); /* "a" = anfügen; "w" = überschreiben; "r" = lesen */ if(files == 0) { printf("ERROR: Could not find files.txt!\n"); return; } /* Die Ausgabedatei erstellen: */ writefile = fopen("ausgabe.txt", "w"); if(writefile == 0) { printf("ERROR: Konnte die Datei ausgabe.txt nicht erstellen.\n"); } while (fgets (szLine, sizeof szLine, files)) { char* file; if (file = strchr (szLine, '\n')) { *file = '\0'; /* Entferne das '\n' */ } file = szLine + 1; /* Zeigt auf den Dateinamen. Ignoriert das erste Zeichen */ printf ("Versuche zu oeffnen: %s .............", file); readfile = fopen(file, "r"); printf(" erfolgreich\n"); while((daten = fgetc(readfile)) != EOF) { fputc(daten, writefile); } fputs("\n***END OF FILE***\n", writefile); fclose(readfile); } fclose(files); fclose(writefile); }
Das Programm öffnet verschiedene Datein, die in der files.txt angegeben sind, und schreibt sie nacheinander ein die Datei Ausgabe.txt. Am Ende jeder Zeile steht dann ***END OF FILE***, damit man sie Später wieder auseinander bekommt.
Ich werd mich jetzt hinsetzen und versuchen ein Programm zu schreiben, das aus der einen Datei wieder alle Datein in der files.txt macht.
Thx nochmal für die Hilfe!!!
Cu,
iuiz.[ Dieser Beitrag wurde am 25.11.2002 um 18:38 Uhr von iuiz editiert. ]**
-
f ist die Datei von der eingelesen wird und out ist die Datei in die alles geschrieben wird
-
Also ich hab das jetzt nicht mit out gelöst, weil ich irgendwie fertig werden wollte :). Obwohl, es ist ja fast genau so.
Also es klappt jetzt und ich bin erstmal zufrieden :).
Aber natürlich nochmal ein grosses Danke.