2009-07-07 2 views
0

Mögliche Duplizieren:
How to output array of doubles to hard drive?ein Array von Doppel in einer Datei auf der Festplatte ausgeben

Hallo an alle,

Leider zweimal die gleiche Frage zu fragen, ich bin neu dabei und noch lernen, wie man diese Seite richtig benutzt.

Ich möchte ein Array von Floats/Doubles auf meiner Festplatte in Form einer Datei speichern (.txt .dat .bin, was auch immer, es spielt keine Rolle).

mag ich die Datei von einem Spiegelbild sein, was das ursprüngliche Array aussah, wie es in dem RAM saß. Ich möchte auch wissen, wie man diese Daten schnell und effizient zurück in ein Programm liest (im Grunde kopieren Sie diesen Datenblock von der Festplatte direkt zurück in den RAM und lassen Sie das Programm wissen, dass "dies" ein Array von Doubles ist).

Schließlich, da ich riesige Datenmengen ausgabe (bis zu ein paar hundert MB, je nach Fall) muss ich in der Lage sein, dies schnell und effizient zu tun.

Vielen Dank im Voraus,

-Faken

+0

Verwenden Sie einfach die Bearbeitungsschaltfläche auf Ihrem ersten Post. –

+0

Ich versuchte es, aber ich hatte die Frage schon so vermasselt, dass ich mit Antworten endete, die nicht das waren, was ich wollte. Ich habe auch den Thread nicht überwacht ... Ich war nicht an die Geschwindigkeit gewöhnt, mit der diese Website sich bewegt !! – Faken

+0

Gehen Sie voran und bearbeiten Sie Ihre erste Frage. Es ist immer noch eine bessere Option als ein Duplikat zu erstellen, auch wenn einige ältere Antworten ihre Gültigkeit verlieren könnten. –

Antwort

0

Sie SQLite verwenden könnte, die Verwendung von SQL in Ihrem Programm bietet einen einfachen Zugang. Here you'll find the amalgamation.

Auch könnten Sie diese beautiful C++ wrapper um SQLite überprüfen. Auf diese Weise können Sie Ihre Daten in kürzester Zeit auf HDD speichern und Sie können auch effiziente Abfragen verwenden, um die Daten abzurufen.

2

Hier ist ein einfacher Code für den Einstieg. Natürlich sollten Sie eine Fehlerüberprüfung usw. hinzufügen. Außerdem müssen Sie entscheiden, ob Sie gepuffertes oder ungepuffertes IO wünschen. Ein anderer (nicht portabler, aber möglicherweise schnellerer) Ansatz besteht darin, STL zu umgehen und direkt zum Betriebssystem zu gehen. Schließlich weiß ich nicht, Boost, aber ich habe den Eindruck, dass fast alles, was man sich wünschen kann, da ist, so dass Sie vielleicht auch dort hinschauen wollen.

#include <fstream> 
#include <string> 

using std::ofstream; 
using std::ifstream; 
using std::string; 

void WriteDoubleArray(const double arr[], size_t size, const string fileName) 
{ 
    ofstream outFile(fileName.c_str(), std::ios::binary); 
    outFile.write((const char *)arr, size * sizeof(arr[0])); 
} 


void ReadDoubleArray(double arr[], size_t size, const string fileName) 
{ 
    ifstream inFile(fileName.c_str(), std::ios::binary); 
    inFile.read((char *)arr, size * sizeof(arr[0])); 
} 
Verwandte Themen