GUTEN TAG Ich hab hier an der FH MASCHINENBAU ein Problem Folgendes ein Festplattenverzeichniss enthält 350 Dateien (zb 12A435A.fr.txt) alles unterschiedlich jedoch .fr.txt jede Datei enthält 151 zeilen mit Messdaten ALLE GLEICHES FORMAT ich würde die messdaten gerne auswerten dazu wäre eine Datei sinnvoll !!!!!! MEIN problem es soll eine datei entstehen alles.txt inhalt die ersten 3 zeichen des ursprünglichen dateinamens + datensatz zeile also 12A Datensatz1 12A datensatz2 .... 12A datensatz151 zht datensatz1 ...zht datensatz 151 r1t datensatz 1 alle dateien haben die endung .fr.txt ich hab auch linux livecd zur verfügung besser wäre allerdings eine lösung in C++ Für Eure Hilfe Wäre ich Dankbar
Ich hab jetzt mal unter linux die Dateien auf 3Zeichen.txt da erleichtert die sache Denke ich Danke
Das müsste sich doch sinngemäss mit copy a + b + c d lösen lassen
so ich habs nur warum speichert das PROG mir beim erkennen des fileendes noch einen leeren datensatz wenn der weg wäre wär ich glücklich while (! datfile.eof()) { i++; // Die Datei zeilenweise auslesen datfile.getline(daten[a][i], 65); if (daten[a][i] != "-1 "){ ziel << dat_name[a] << " " << daten[a][i] << endl; cout << daten[a][i] << endl;} } danke
Lothar Sammel wrote: > so ich habs > > nur warum speichert das PROG mir beim erkennen des fileendes > > noch einen leeren datensatz weil du den Standardfehler in der Dateibehandlung gemacht hast, der auch in vielen Lehrbüchern gemacht wird: eof() ist nicht dazu gedacht, um die Leseschleife abzubrechen. eof() ist dazu gedacht festzustellen warum eine Leseoperation schief gelaufen ist. C versucht nicht (anders als andere Sprachen) in die Zukunft zu schauen. Ob eine Datei zu Ende ist oder nicht, kann erst festgestellt werden, nachem eine Leseoperation versucht wurde und diese fehl- geschlagen ist. Erst nach diesem Fehlschlag wird dann untersucht, warum die Leseoperation fehlgeschlagen ist. War es, weil eof() aufgetreten ist, dann ist alles in Ordnung: Die Datei wurde komplett gelesen. C unterstützt diese Sichtweise dadurch, dass jede Leseoperation einen Returnwert hat, der meist direkt benutzt werden kann, um festzustellen ob die Leseoperation gut ging oder nicht. (Hmm. Sehe gerade du benutzt C++ und ich weiss nicht welche File-Klasse du dafür benutzt. Klär mal ab, was der Returnwert von getline ist und was er aussagt. Ich geh mal davon aus, dass das vernünftig implementiert ist und sich Systemkonform verhält while( datfile.getline(daten[a][i], 65) ) { if (daten[a][i] != "-1 ") { ziel << dat_name[a] << " " << daten[a][i] << endl; cout << daten[a][i] << endl;} i++; } } if( !datfile.eof() ) { cout << "Fehler während des Lesens"; } else { // Datei fehlerfrei gelesen, mach was mit den Daten } Welchen zusaätzlichen Vorteil hat diese Sichtweise? Ganz einfach: Deine originale Schleife (wenn sie denn funktionieren würde) bricht nur dann ab, wenn eof erreicht wurde. Nur: Wie ist das im Fehlerfall? Sagen wir mal jemand nimmt die Diskette, CD, USB-Stick aus dem Gerät. Deine Netzwerkverbindung bricht zusammen. Das Modem hat einen Fehler. Die CD hat einen Kratzer. Auf der WLan Verbindung gab es einen Fehler durch Funkstörung. etc. etc. In all diesen Fällen handelt es sich nicht um einen eof(). Und der wird auch nicht kommen. Deine Schleife aber läuft und läuft und läuft und wartet auf einen eof() der nicht eintreten wird. Meine Schleife hingegen, bricht ab, wenn keine Daten mehr gelesen werden konnten. Egal aus welchem Grund. Keine Daten gelesen -> Schleife bricht ab. Und erst nachher wird untersucht, warum die Schleife abgebrochen wurde. Damit ist aber auch sichergestellt, dass das Programm nicht in einer Endlosschleife hängen kann.
DANKe für die Sehr Ausführliche Beantwortung das hilft Ungemein damit wäre der Thread Beantwortet
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.