.txt Dateien
-
@ Werner Salomon: Die Minus Zeichen stehen stellvertretend für ein Leerzeichen.
-
evo-style schrieb:
@ Werner Salomon: Die Minus Zeichen stehen stellvertretend für ein Leerzeichen.
Dann geht's nach Schema F:
- struct/class bauen in die ein Datensatz passt
- Streaming-Operator für die struct/class erstellen
- for-Schleife zum Einlesen
- Am Ende auf EOF prüfen, ob bis ans Ende gelesen wurde.Hier kommt noch hinzu, dass anscheinend in der ersten Zeile eine Überschrift steht und am Anfang jeder Zeile ein "Pos.#", was man aber beides mit ignore überlesen kann.
Ich unterstelle, Deine Datei sieht etwa so aus:Stand. Rohwert: Normgrösse: Pos.1 0 0 Pos.2 5 12 Pos.2 16 36dann funktioniert folgendes:
#include <iostream> #include <fstream> #include <limits> struct Record { int srw_; // Stand.-Rohwert int normgr_; // Normgrösse }; // -- Lese einen Datensatz bestehend aus Stand.-Rohwert & Normgrösse ein std::istream& operator>>( std::istream& in, Record& rec ) { return in >> rec.srw_ >> rec.normgr_; } int main() { using namespace std; const streamsize ALL = std::numeric_limits< streamsize >::max(); ifstream datei("Liste1.txt"); if( !datei.is_open() ) { cerr << "Fehler beim Oeffnen der Datei" << endl; return -2; } datei.ignore( ALL, '\n' ); // erste Zeile "Stand.-Rohwert: Normgrösse" überlesen for( Record rec; (datei >> ws).ignore( ALL, ' ' ) >> rec; ) // erstes Wort überlesen; dann 'Record' lesen { // ... mache irgendwas mit 'rec' cout << "Normgroesse: " << rec.normgr_ << endl; } if( !datei.eof() ) cerr << "Lesefehler" << endl; return 0; }Gruß
Werner
-
Vielen Dank im Voraus. Werde es gleich probieren! Ist echt super nett!
-
Kann es leider nicht übersetzen in Zeile 31 sei ein Fehler "::". Das ist folgende Zeile:
const streamsize ALL = std::numeric_limits< streamsize >::max();
Konntest du das Übersetzen Werner Salomon?
-
edit: Hier stand Mist.
P.S.: Gib mal bitte die genau Fehlermeldung an.
-
evo-style schrieb:
Kann es leider nicht übersetzen in Zeile 31 sei ein Fehler "::". Das ist folgende Zeile:
const streamsize ALL = std::numeric_limits< streamsize >::max();
Falls Du unter Windows arbeitest und ein #include "stdafx.h" oder ein #include "windows.h" oder etwas äquivalentes oberhalb dieser Zeile stehen hast, musst Du vor dem ersten #include-Statement ein #define NOMINMAX setzen.
In z.B. "Windows.h" ist max als Makro definiert.
Gruß
Werner
-
Der genau Fehler lautet:
error C2059:Syntaxfehler:'::'
error C2589: 'ungültiges Token auf der rechten Seite von '::'Ich arbeite mit VisualStudio 2010 Express.
#include "stdafx.h" wie auch #include "Windows.h" ist drin.
include Statement ist auch eingefügt, läauft aber immer noch nicht
-
evo-style schrieb:
#include "stdafx.h" wie auch #include "Windows.h" ist drin.
include Statement ist auch eingefügt, läauft aber immer noch nicht
Lies Werners Antwort noch einmal genau!
-
evo-style schrieb:
include Statement ist auch eingefügt, läauft aber immer noch nicht

Hallo evo-style,
Wenn das obige nur ein Tippfehler in Deiner Antwort ist, und Du alles richtig gemacht hast, so kann es noch daran liegen, dass Du 'precompiled Header' verwendest. Wir verwenden sie gar nicht mehr, weil 'precompiled Header':
- machen nur Ärger
- Build dauert länger (JA länger - wir haben es gemessen!)
- Müllt die Platte mit riesigen pch-Dateien voll
- sind sinnlos, ich weiß nicht wozu die gut sind.Also, wenn Du 'precompiled Header' verwendest, dann setze das #define NOMINMAX in das stdafx.h in die erste Zeile vor allen #include-Statements und mache ein 'rebuild all'. Oder alternativ/besser 'precompiled header' in Projekt-Settings abschalten, und stdafx.cpp aus dem Projekt entfernen.
Gruß
Werner
-
War ein Tippfehler von mir Sorry! Was ist denn ein rebuild all oder ein precompiled header? Leider bin ich noch blutiger Anfänger und habe keine Ahnung was dass heissen soll.

-
Schau mal hier, was ich gefunden habe. Got the hint?