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.