array of floats in Datei speichern/laden



  • Wie kann ich ein

    float* myarray;
    size_t myarray_size
    

    in 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_size
    

    in 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


Anmelden zum Antworten