giuseppe2
Messages postés2Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention17 mai 2004
-
16 mai 2004 à 16:22
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
17 mai 2004 à 20:14
Bonjour,
Je commence tout juste en C++ et je me galère commen un fou pour des histoires de lecture de données à partir d'un fichier.
J'ouvre un fichier qui contient un certain nombre de données et je voudrais classer les valeurs lues dans des tableaux correspondant pour ensuite les manipuler.
Mon fichier est de la forme :
date time ch1 ch2 ch3
16/05/2004 16:11:58 -2.378 -0.321 1.252
16/05/2004 16:11:59 -1.964 -0.471 0.721
etc.
Soit une ligne de texte pour commencer et ensuite des lignes de valeurs (nombre d lignes indeterminées a priori).
Donc en gros, je voudrais créer 5 tableaux (date, time, ch1, ch2 et ch3) avec dedans les valeurs lues.
Comment faire ?
Je sais, c'est probablement très très très basique, mais pour l'instant encore hors de ma portée...
J'ai essayé avec les ifstream et autres cin>> mais il semble que les "/" et les ":" mettent un peu le bronx...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 16 mai 2004 à 17:16
un petit exemple qui montre que c'est pas si dur que ca
#include
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
// structure pour contenir l'enregistrement
// d'une ligne
struct Record
{
string date;
string time;
vector<float> values;
Record() :
values(vector<float>(3))
{ }
};
int main()
{
// tableau de records
vector<Record> records;
// indice
vector<Record>::size_type ind=0;
// tu ouvre le fichier
ifstream file("fichier.txt");
// tu passe la premiere ligne
file.ignore(100,'\n');
// string pour contenir une ligne
// saisie a partir du fichier
string line;
// tant qu'une lign peux etre saise
// a partir du fichier
while( getline(file,line) )
{
// tu rajoute une case au tableau
records.resize(ind+1);
// tu met line dans une chaine-flux
istringstream iss(line);
// saisie comme si tu faisais un cin
iss >> records[ind].date;
iss >> records[ind].time;
iss >> records[ind].values[0];
iss >> records[ind].values[1];
iss >> records[ind].values[2];
ind++;
}
// boucle pour afficher la saisie
for(vector<Record>::size_type i=0;
i < records.size(); i++ )
{
cout<<"enregistrement ligne "<<i+1<<'\n';
cout<<"date : "<<records[i].date<<'\n';
cout<<"time : "<<records[i].time<<'\n';
cout<<"valeur 1 : "<<records[i].values[0]<<'\n';
cout<<"valeur 2 : "<<records[i].values[1]<<'\n';
cout<<"valeur 3 : "<<records[i].values[2]<<"\n\n";
}
cout.flush();
cin.get();
}