So, ich bin endlich mal dazu gekommen, ein kurzes Beispiel zusammenzustellen. Ich habe eines meiner Projekte genommen und eine passende Stelle soweit zusammengestutzt, dass du damit hoffentlich was anfangen kannst. Ich bin nicht dazugekommen, mieinen zusammenkopierten Code zu testen, aber eigentlich sollte er problemlos laufen und dir als Grundlage für Spielereien dienen können.
Es ist nicht die einfachste Methode, Daten zu speichern, aber es werden einige in Bezug auf C++ wichtige Sachen verwendet:
- Streams im Gegensatz zu den alten fopen()/fclose()- Funktionen
- Operatoren zur Stream-Insertion und -Extraktion
- ein std::vector als Container (für dich käme vermutlich eher eine std::list in Frage)
Tut mir leid, wenn das etwas knifflig wirkt, aber ich denke, es ist besser, dir anhand eines Reallife-Beispiels zu zeigen, wie man das Ganze machen kann, ohne auf die alten C-Monster zurückzugreifen. In dieser Minianwendung lässt sich der Nutzen vielleicht noch nicht erkennen.
Ausserdem wollte ich mir auch nicht mehrere Stunden Zeit für ein halbwegs vollständiges Beispiel nehmen, deshalb das Geschnipsel.
Ich hoffe, es hilft dir weiter. Wenn noch Probleme auftauchen, frag nach.
Code:
#include <iostream>
#include <string>
#include <fstream>
// eine abgespeckte testclass
struct splinepoint
{
bool smooth, symmetric;
};
// operator zum einfügen eines splinepoints in einen stream ("speichern in text")
inline std::ostream& operator<<( std::ostream& s, splinepoint& p )
{
s << p.smooth << " " << p.symmetric;
return s;
}
// operator zum extrahieren eines splinepoints aus einen stream ("lesen aus text")
inline std::istream& operator>>( std::istream& s, splinepoint& p )
{
s >> p.smooth >> p.symmetric;
return s;
}
// ein fast überflüssiges typedef
typedef std::vector<splinepoint> vectSplinePoints;
// ein std::vector von splinepoints
vectSplinePoints m_SplinePoints;
// funktion zum speichern der splinepoints in textdatei
void SaveSpline( std::ostream& s )
{
vectSplinePoints::iterator it( m_SplinePoints.begin() ), itend( m_SplinePoints.end() );
for ( ; it != itend; ++it )
{
s << "point " << *it << "\n";
}
}
// funktion zum laden der splinepoints aus textdatei
void LoadSpline( std::istream& s )
{
char szTemp[5000];
std::string temp;
m_SplinePoints.clear();
while ( s )
{
s >> szTemp;
temp = szTemp;
// s >> temp;
if ( temp == "point" )
{
splinepoint p;
s >> p;
m_SplinePoints.push_back( p );
}
}
}
int main()
{
// alles nur dummy, bitte ausprobieren
// laden
std::ifstream s( "einedatei.txt" );
LoadSpline( s );
//speichern
std::ofstream s( "einedatei.txt" );
SaveSpline( s );
return 0;
}