Lecture de fichier

giuseppe2 Messages postés 2 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 17 mai 2004 - 16 mai 2004 à 16:22
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 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...

Merci de votre aide !

3 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
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();
}

0
giuseppe2 Messages postés 2 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 17 mai 2004
17 mai 2004 à 11:57
Merci beaucoup de cette réponse, j'ai presque tout compris et en tous cas je vois un peu mieux maintenant comment ça marche...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 mai 2004 à 20:14
si ya encore quelques points obscures n'hesite pas
0
Rejoignez-nous