lecture fichier de données séparés par des tabulations

lecture fichier de données séparés par des tabulations - C++ - Programmation

Marsh Posté le 01-08-2008 à 09:24:42    

Bonjour,
 
je souhaiterais lire un fichier de donénes text .... on a plsueiurs lignes et plueisurs colonnes séparées par des tabulation, le but est de récupérer chaque ligne et de la considérer comme un nouvel objet de ma classe que je stockerai ds un tableau.

Reply

Marsh Posté le 01-08-2008 à 09:24:42   

Reply

Marsh Posté le 01-08-2008 à 09:38:54    

getline pour lire chaque ligne, boost::tokenizer pour extraire les morceaux de ta ligne. A répéter tant que getline renvoit ce qui faut.

 

J'ai donner un exemple complet 2-3 fois pr le même problème, use the Search button Luke !

 
Code :
  1. #include <vector>
  2. #include <string>
  3. #include <fstream>
  4. #include <boost/tokenizer.hpp>
  5. using namespace std;
  6. using namespace boost;
  7. int main()
  8. {
  9.   vector<string> colonne;
  10.   string ligne;
  11.   ofstream fichier("truc.txt" );
  12.   // Tant que j'ai des lignes à lire
  13.   while (getline (fichier, ligne))
  14.   {
  15.     typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
  16.     boost::char_separator<char> sep("\t" );
  17.     // tokenisation de la ligne courante
  18.     tokenizer tokens(ligne, sep);
  19.     // Recup des tokens via un token_iterator
  20.     tokenizer::iterator tok_iter = tokens.begin();
  21.     while(tok_iter != tokens.end())
  22.     {
  23.         // ici *tok_iter conteint ta colonne courante, tu en fais ce que tu veux
  24.      // colonne suivante
  25.       tok_iter++;
  26.     }
  27.   }
  28.   return 0;
  29. }


Message édité par Joel F le 01-08-2008 à 09:43:51
Reply

Marsh Posté le 03-08-2008 à 11:34:39    

Citation :


 
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
    boost::char_separator<char> sep("\t" );
 
 


 
 
Je vous remercie pour votre réponse, mais je ne connais pas du tous cette fonction ... pouvez vous m'expliquer je vous prie le raisonnement de votre code .
 
je vous remercie.
 
PS: il y a une autre façon de faire ss utiliser la fonction tokenize, mais dans le cas ou on a des points virgules en guise dséparateur, il suffirait d'extraire les sous chianes a cahque fois qu'il y a des points virgules ... ne pouvons pas faire paeil dans le cas d'une tabulation ????? somme nous obliger d'utiliser la fonction tokenize ? n'aurit il pas un auetr moyen ???
 
 Merci encore.  
 
A+++

Reply

Marsh Posté le 03-08-2008 à 12:10:01    

Reply

Marsh Posté le 03-08-2008 à 12:48:57    

ok, mais qu'est ce qui spécifie le fait qu'on a une tabulation ???  
 
est ce le \t ??? dans ce cas la \n signifie quoi au juste ???

Reply

Marsh Posté le 03-08-2008 à 17:27:34    

mathematica a écrit :

ok, mais qu'est ce qui spécifie le fait qu'on a une tabulation ???  
 
est ce le \t ??? dans ce cas la \n signifie quoi au juste ???


 
\t désigne en effet la tabulation, \n le caractère de fin de ligne.
Mais si tu ne connais pas ce genre de choses, je me demande si te donner une solution
sans boost peut t'aider beaucoup.  Mais bon, en voici une:
 

Code :
  1. #include <iostream>
  2. #include <istream>
  3. #include <ostream>
  4. #include <string>
  5. int main()
  6. {
  7.     std::string line;
  8.    
  9.     while (getline(std::cin, line))
  10.     {
  11.         std::string::size_type curpos = 0;
  12.         do {
  13.             std::string::size_type endpos = line.find('\t', curpos);
  14.             std::cout << '|' << line.substr(curpos, endpos-curpos) << "|\n";
  15.             curpos = endpos + 1;
  16.         } while (curpos != 0);
  17.         std::cout << "EOR\n";
  18.     }
  19.     return 0;
  20. }


Message édité par Un Programmeur le 03-08-2008 à 17:28:00
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed