array of floats in Datei speichern/laden
-
Wie kann ich ein
float* myarray; size_t myarray_sizein eine Datei speichern und wieder laden? Gerne auch mit boost.
-
int file = open(filename, O_BINARY | O_CREAT | O_WRONLY); write(file, (char *) theta, MEMORY_SIZE * sizeof(float)); close(file);und
int file = open(filename, O_BINARY | O_RDONLY); read(file, (char *) theta, MEMORY_SIZE * sizeof(float)); close(file);geht leider nicht.
-
Was geht nicht?
(Das open oder write oder read oder ...)Und warum die POSIX-Funktionen und nicht fopen, fwrite und fread?
-
Es kompiliert nicht, weil es die Funktionen open/read/write nicht gibt.
Wie macht man es mit fopen/fread/fwrite?
-
Im Prinzip genauso, nur mit FILE* statt int.
Schau halt in deiner Referenz nach oder bei http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/.
-
Oder noch besser: std::ofstream...
-
Danke euch.
-
hmmmmmm schrieb:
Wie kann ich ein
float* myarray; size_t myarray_sizein eine Datei speichern und wieder laden? Gerne auch mit boost.
Standard C++ reicht völlig aus:
#include <algorithm> // copy #include <iterator> // o/istream_iterator #include <fstream> #include <iostream> #include <memory> // unique_ptr int main() { using namespace std; const char* filename = "datei.txt"; const size_t myarray_size = 7; { // -- Schreiben unique_ptr< float[] > myarray( new float[myarray_size] ); float f = 1.f; for( float* dst = myarray.get(); dst != myarray.get() + myarray_size; ++dst, f *= 1.5f ) *dst = f; ofstream file( filename ); copy( myarray.get(), myarray.get() + myarray_size, ostream_iterator< float >( file, "\n" ) ); } { // -- Lesen unique_ptr< float[] > myarray( new float[myarray_size] ); { ifstream file( filename ); if( !file.is_open() ) { cerr << "Fehler beim Oeffnen der Datei" << endl; return -2; } float f; for( float* dst = myarray.get(); dst != myarray.get() + myarray_size && file >> f; ++dst ) *dst = f; } copy( myarray.get(), myarray.get() + myarray_size, ostream_iterator< float >( cout << "> ", " " ) ); cout << endl; } return 0; }Muss es unbedingt ein float* sein, mit vector<float> wär's etwas einfacher und robuster.
Gruß
Werner