Datei lesen und parsen
-
Hallo Profis,
ich habe bestimmte Daten, die sich folgenderweise in einer Datei befinden:
000,0.0,0.0
001,0.70711,0.70711
011,0.0,1.0
010,-0.70711,0.70711
110,-1.0,0.0
111,-0.70711,-0.70711
101,0.0,-1.0
100,0.70711,-0.70711Nachdem ich die Datei geöffnet habe, will ich die Daten in z.B. einem dynamischen Speicher in Form einer Tabelle speichern.
So in der Art:
Bits:
Werte (Float):
000
0.0,0.0
001
0.70711,0.70711
010
-0.70711,0.70711
ect..Die Bits lese ich später aus einer anderen Datei und vergleicht sie mit denen in meiner Tabelle. So hole ich dann die entsprechenden Werte ab.
Wie sieht der Code von so einem Problem in C++ aus, wenn man das mit Map machen will?
Gibt´s andere Möglichkeiten ausser Map?
Jemand hatte mir etwas von scanf gesagt. Das Problem ist aber, dass ich NULL Ahnung von C habe. Ich komm aus der Java-Welt.
Danke voraus.
Gruß
-
Du bist hier im C++ Board gelandet, also kriegst du auch eine C++ Lösung (wenn's unbedingt C sein soll, sag Bescheid, dann schiebe ich den Thread in den richtigen Bereich):
Du kannst die Datei am besten zeilenweise einlesen (die Funktion nennt sich getlin()), dann jede Zeile aufspalten (substr()) und geeignet in eine map packen:
map<string,string> data; string zeile while(getline(meinedatei,zeile)) { string bits = zeile.substr(0,3),werte = zeile.substr(4); data[bits]=werte; }
-
Hi CStoll,
bevor ich es probiere, will ich Dir zuerst ein Kompliment machen.
Ich finde es super wie schnell Du die Fragen beantwortest.Ich bin begeistert.
Danke und weiter so.
Gruß
-
Hi CStoll,
ich hab´s gemacht, wie Du es gesagt hast. Und zwar so:
while(!dateiZumLesen.eof()) { getline(dateiZumLesen, line); string bits = line.substr(0,3); string werte = line.substr(4); data[bits]=werte; } dateiZumLesen.close();Nach dem Ausführen des Programms kriege ich einen "Debug Error" von "Microsoft Visual C++ Debug Library".
Und zwar:
"This application has requested the Runtime to terminate it in an unusual way. Please contact the application´s support team for more information."Ich habe keine Ahnung was das ist.
Was habe ich falsch gemacht?Gruß
-
Erstmal hast du es nicht so gemacht - vergleich mal die beiden Codes hier (deine Schleife läuft einmal zu oft durch - in Extremfällen hast du sogar eine Endlosschleife).
Und zweitens: Wo genau tritt denn der Fehler auf?
-
Du kommst nun in die ehrenwerte Situation, Debuggen zu dürfen

Was für eine IDE und Compiler hast du denn? Visual C++?
-
1. Benutze den Code so wie ihn CStoll geschrieben hat, also das getline in die while-Bedingung und nicht den Test auf eof.
2. Das close kannst du dir sparen, denn in C++ gibts Destuktoren die das für dich erledigen.
3. Du solltest den gesamten Code zeigen, wenn du nur so wenige Informationen über den Fehler liefern kannst.
-
Das war mein Fehler. Ihr habt Recht, wie immer halt

Das war sehr offensichtlich, dass ich den Code nicht genau geschrieben habe, wie er es gemeint hatte.
Danke
Gruß