Ecrire dans un fichier binaire
Posté : lun. 18 août 2014 10:49
Bonjour,
Je travaille sur des fichiers de mesures météorologiques (txt) regroupées en colonnes. Une fois que j'ai extrait chaque colonne pour pouvoir l'utiliser seule, l'entreprise me demande de stocker ces données sous format 16bits dans un fichier binaire. J'aimerais savoir comment faire pour que, en ouvrant mon fichier de base et en le lisant en ASCII je puisse en faire plusieurs fichiers .bin avec la conversion que cela implique ...
Ci-dessous le code correspondant à l'extraction des colonnes de données, mais pour le moment la lecture ET l'écriture se font sous format ASCII ...
#include iostream
#include fstream
#include string
int main()
{
using namespace std;
ifstream liste("liste_de_fichiers.txt", ios::in);
if(liste)
{
string lisligne;
string filename0, filename1,filename2,filename3,filename4;
string ligne;
double doublea,doubleb,doublec,doubled,doublee,doublef;
double double1, double2, double3, double4, double5, double6;
while(getline(liste, lisligne))
{
liste filename0; //lecture du nom de fichier dans un fichier "liste de fichiers"
filename1 = "/home/rs/Desktop/eclats/" + filename0 + "_1"; //création du nom du fichier où sera retranscrite la colonne 1
filename2 = "/home/rs/Desktop/eclats/" + filename0 + "_2"; //colonne 2
filename3 = "/home/rs/Desktop/eclats/" + filename0 + "_3"; // 3
filename4 = "/home/rs/Desktop/eclats/" + filename0 + "_4"; // 4
filename0 = "/home/rs/Desktop/données_modèles/données_modèles/2011/" + filename0; //Nom du fichier de base (avec toutes les colonnes)
ifstream fichier0(filename0.c_str(), ios::in); //fichier lecture
ofstream fichier1(filename1.c_str(), ios::out); // ecritures
ofstream fichier2(filename2.c_str(), ios::out);
ofstream fichier3(filename3.c_str(), ios::out);
ofstream fichier4(filename4.c_str(), ios::out);
if(fichier0 fichier1 fichier2 fichier3 fichier4)
{
fichier0 doublea doubleb doublec doubled doublee doublef; //lecture des 6 colonnes
//retranscription d'une colonne par fichier
fichier1 doublec*100;
fichier2 doubled*100;
fichier3 doublee*100;
fichier4 doublef*100;
while(getline(fichier0, ligne)) // tant que l'on peut mettre la ligne dans "contenu"
{
fichier0 double1 double2 double3 double4 double5 double6;
fichier1 double3*100;
fichier2 double4*100;
fichier3 double5*100;
fichier4 double6*100;
}
//fichiers traités
coutfilename0endl;
coutfilename1endl;
coutfilename2endl;
coutfilename3endl;
coutfilename4endl;
}
else
cerr"Impossible d'ouvrir le fichier!1"endl;
}
liste.close();
}
else
cerr"Impossible d'ouvrir le fichier!"endl;
return 0;
}
Merci d'avance !
Je travaille sur des fichiers de mesures météorologiques (txt) regroupées en colonnes. Une fois que j'ai extrait chaque colonne pour pouvoir l'utiliser seule, l'entreprise me demande de stocker ces données sous format 16bits dans un fichier binaire. J'aimerais savoir comment faire pour que, en ouvrant mon fichier de base et en le lisant en ASCII je puisse en faire plusieurs fichiers .bin avec la conversion que cela implique ...
Ci-dessous le code correspondant à l'extraction des colonnes de données, mais pour le moment la lecture ET l'écriture se font sous format ASCII ...
#include iostream
#include fstream
#include string
int main()
{
using namespace std;
ifstream liste("liste_de_fichiers.txt", ios::in);
if(liste)
{
string lisligne;
string filename0, filename1,filename2,filename3,filename4;
string ligne;
double doublea,doubleb,doublec,doubled,doublee,doublef;
double double1, double2, double3, double4, double5, double6;
while(getline(liste, lisligne))
{
liste filename0; //lecture du nom de fichier dans un fichier "liste de fichiers"
filename1 = "/home/rs/Desktop/eclats/" + filename0 + "_1"; //création du nom du fichier où sera retranscrite la colonne 1
filename2 = "/home/rs/Desktop/eclats/" + filename0 + "_2"; //colonne 2
filename3 = "/home/rs/Desktop/eclats/" + filename0 + "_3"; // 3
filename4 = "/home/rs/Desktop/eclats/" + filename0 + "_4"; // 4
filename0 = "/home/rs/Desktop/données_modèles/données_modèles/2011/" + filename0; //Nom du fichier de base (avec toutes les colonnes)
ifstream fichier0(filename0.c_str(), ios::in); //fichier lecture
ofstream fichier1(filename1.c_str(), ios::out); // ecritures
ofstream fichier2(filename2.c_str(), ios::out);
ofstream fichier3(filename3.c_str(), ios::out);
ofstream fichier4(filename4.c_str(), ios::out);
if(fichier0 fichier1 fichier2 fichier3 fichier4)
{
fichier0 doublea doubleb doublec doubled doublee doublef; //lecture des 6 colonnes
//retranscription d'une colonne par fichier
fichier1 doublec*100;
fichier2 doubled*100;
fichier3 doublee*100;
fichier4 doublef*100;
while(getline(fichier0, ligne)) // tant que l'on peut mettre la ligne dans "contenu"
{
fichier0 double1 double2 double3 double4 double5 double6;
fichier1 double3*100;
fichier2 double4*100;
fichier3 double5*100;
fichier4 double6*100;
}
//fichiers traités
coutfilename0endl;
coutfilename1endl;
coutfilename2endl;
coutfilename3endl;
coutfilename4endl;
}
else
cerr"Impossible d'ouvrir le fichier!1"endl;
}
liste.close();
}
else
cerr"Impossible d'ouvrir le fichier!"endl;
return 0;
}
Merci d'avance !