mikrocontroller.net

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


Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt mal unter linux die Dateien auf 3Zeichen.txt

da erleichtert die sache

Denke ich
Danke

Autor: StinkyWinky (Gast)
Datum:

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

Autor: Lothar Sammel (magic33)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKe
für die Sehr Ausführliche Beantwortung das hilft Ungemein

damit wäre der Thread Beantwortet

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.