Forum: PC-Programmierung C+ neuling mit Dateien und Daten umstrukturierungs PROBLEM


von Lothar S. (magic33)


Lesenswert?

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

von Lothar S. (magic33)


Lesenswert?

Ich hab jetzt mal unter linux die Dateien auf 3Zeichen.txt

da erleichtert die sache

Denke ich
Danke

von StinkyWinky (Gast)


Lesenswert?

Das müsste sich doch sinngemäss mit copy a + b + c d lösen lassen

von Lothar S. (magic33)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Lothar S. (magic33)


Lesenswert?

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
Noch kein Account? Hier anmelden.