2009-07-07 6 views
0

Possible en double:
How to output array of doubles to hard drive?un tableau de Restitution doubles dans un fichier sur le disque dur

Bonjour à tous,

Désolé pour demander deux fois la même question, je suis nouveau à ce sujet et encore apprendre comment utiliser ce site correctement.

Je veux stocker un tableau de flottants/doubles sur mon disque dur sous la forme d'un fichier (.txt .dat .bin, peu importe, peu importe).

Je veux que ce fichier soit une image miroir de ce à quoi ressemblait le tableau original puisqu'il était dans la RAM. Je veux aussi savoir comment lire ces données rapidement et efficacement dans un programme (en gros copier ce morceau de données du disque dur directement dans la RAM et faire savoir au programme que "ceci" est un tableau de doubles). Enfin, puisque je produis d'énormes volumes de données (jusqu'à quelques centaines de Mo, selon le cas), je dois pouvoir le faire rapidement et efficacement.

Merci à l'avance,

-Faken

+0

Il suffit d'utiliser le bouton d'édition sur votre premier message. –

+0

J'ai essayé, mais j'avais déjà foiré la question si mal que j'ai fini avec des réponses qui n'étaient pas ce que je voulais. Je n'ai pas non plus surveillé le fil ... Je n'étais pas habitué à la vitesse à laquelle ce site se déplace !! – Faken

+0

Allez-y et éditez votre première question. C'est toujours une meilleure option que de créer un doublon, même si certaines réponses plus anciennes pourraient perdre leur validité. –

Répondre

0

Vous pouvez utiliser SQLite, qui permet d'accéder facilement à l'aide de SQL dans votre programme. Here you'll find the amalgamation.

En outre, vous pouvez consulter ce beautiful C++ wrapper autour de SQLite. De cette façon, vous pouvez enregistrer vos données sur le disque dur en un rien de temps et vous pouvez également utiliser des requêtes efficaces pour récupérer les données.

2

Voici un code de base pour vous aider à démarrer. Bien sûr, vous voudrez ajouter une vérification d'erreur, etc. De plus, vous devrez décider si vous voulez un IO tamponné ou non. Une autre approche (non portable, mais peut-être plus rapide) consiste à contourner la STL et à passer directement au système d'exploitation. Enfin, je ne connais pas le boost, mais j'ai l'impression qu'à peu près tout ce que vous pourriez vouloir faire est là, alors vous pouvez vouloir y jeter un coup d'œil.

#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])); 
} 
Questions connexes