Daten in Datei schreiben
-
hi
mal wieder häng ich ... unzwar muss ich aus einem Array das mit einer struktur versehen ist in eine Datei schreiben. Bisher schreibt er zwar was in die Datei aber nur Buchstaben. Die Zahlen schreibt er als "{Ì œ ". Nun wollte ich fragen ob man mit der funktion fwrite() auch integer Werte schreiben kann.
-
hmm kann es sein das du im Moment deine Datei Binär geöffnet hast?

-
Thelos, nein, fwrite kann nur chars schreiben. Wenn du Zahlen hast und die im 10er System und lesbar in der Datein stehen haben willst musst du fprintf oder was ähnliches verwenden.
-
bei c++ wohl eher nicht ... da öffnet meine stream halt nicht binary und streamt alles rein was man haben will sollte dann im klartext lesbar sein,.
-
(D)Evil schrieb:
bei c++ wohl eher nicht ... da öffnet meine stream halt nicht binary und streamt alles rein was man haben will sollte dann im klartext lesbar sein,.
Hier schreibt aber keiner was von Streams, ausser du eben

:Thelos schrieb:
hi
mal wieder häng ich ... unzwar muss ich aus einem Array das mit einer struktur versehen ist in eine Datei schreiben. Bisher schreibt er zwar was in die Datei aber nur Buchstaben. Die Zahlen schreibt er als "{Ì œ ". Nun wollte ich fragen ob man mit der funktion fwrite() auch integer Werte schreiben kann.
-
jo ... und da wir hier in nem C++ Bereich sind ... sollte man auch auf C++ STL-Funktionen zurückgreifen ...
-
Hallo Thelos,
für das Schreiben und Lesen von Daten, wie Du sie in Deinem ersten Thread beschreiben hast, schlage ich Dir folgendes vor:
#include <fstream> #include <iostream> #include <iterator> #include <vector> std::istream& komma( std::istream& in ) { char c; if( in >> c && c != ',' ) in.setstate( std::ios_base::failbit ); return in; } std::istream& semikolon( std::istream& in ) { char c; if( in >> c && c != ';' ) in.setstate( std::ios_base::failbit ); return in; } struct Record { Record() : m_i1( 0 ), m_i2( 0 ), m_c( ' ' ), m_i3( 0 ), m_i4( 0 ) {} Record( int i1, int i2, char c, int i3, int i4 ) : m_i1( i1 ), m_i2( i2 ) , m_c( c ) , m_i3( i3 ), m_i4( i4 ) {} // -- schreiben friend std::ostream& operator<<( std::ostream& out, const Record& r ) { return out << r.m_i1 << ',' << r.m_i2 << ',' << r.m_c << ',' << r.m_i3 << ',' << r.m_i4 << ';'; } // -- lesen friend std::istream& operator>>( std::istream& in, Record& r_ ) { Record r; if( in >> r.m_i1 >> komma >> r.m_i2 >> komma >> r.m_c >> komma >> r.m_i3 >> komma >> r.m_i4 >> semikolon ) r_ = r; return in; } // -- members int m_i1, m_i2; char m_c; int m_i3, m_i4; }; int main() { using namespace std; vector< Record > v; { // -- aus Datei lesen ifstream file( "input.txt" ); vector< Record > v_( (istream_iterator< Record >( file )), istream_iterator< Record >() ); swap( v, v_ ); } cout << v.size() << " Eintraege gelesen" << endl; { // -- Daten in Datei schreiben ofstream file( "output.txt" ); copy( v.begin(), v.end(), ostream_iterator< Record >( file, "\n" ) ); } return 0; }Gruß
Werner
-
hustbaer schrieb:
Thelos, nein, fwrite kann nur chars schreiben.
Käse. fwrite() kann beliebige Daten schreiben (du übergibst ihm einen "void*" Zeiger). Allerdings schreibt es die Werte in binärer Darstellung (d.h aus einem "normalen" int-Wert macht es einen Block von 4 Zeichen). In Textdarstellung kannst du deine Daten per fprintf() bzw. dem Stream-Operator << ausgeben.