Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2969 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Sélectionner une colonne de données à partir d'un fichier TXT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sélectionner une colonne de données à partir d'un fichier TXT

n°1690743
Player1979
Posté le 22-02-2008 à 15:10:35  profilanswer
 

Bonjour à tous,
 
J'ai 2 question à vous poser afin de pouvoir avancer dans mon code.
1) J'ai un fichier TXT qui constitue mes données (2 colonnes). Je souhaiterai à partir de ce fichier remplir un tableau à 1D avec uniquement les nombres se trouvant dans la 2ème colonne.
Je programme en C++ (du moins j'essaie car j'apprends un peu chaque jour et notamment grâce à ce forum) et utilise DEV C++.
 
2) Ensuite la 2ème question, je désire inverser l'odre d'un fichier TXT càd que la 1ère ligne devienne la dernière et que la dernière devienne la 1ère etc. ...
Merci d'avance pour votre aide.

mood
Publicité
Posté le 22-02-2008 à 15:10:35  profilanswer
 

n°1690936
Player1979
Posté le 22-02-2008 à 18:09:20  profilanswer
 

Exemple:
ifstream f_entree("Cours_Action_S.txt", ios::in);
for(unsigned int i = 0; i < dim; i++)
    {
        f_entree >> S[i];
    }
 
avc f_entree le flux entrant pour remplir mon tableau S le problème est que le fichier Cours_Action_S.txt est constitué de deux colonnes. Or je ne souhaite recopier que la deuxième ! Comment puis je faire ? Auriez vous des réponses, idées etc. ...  
Merci de votre aide

n°1690960
Joel F
Real men use unique_ptr
Posté le 22-02-2008 à 18:57:35  profilanswer
 

tu ouvres ton fichier, tu lis ligne par ligne et tu tokenise chaque ligne avec genre boost::tokenizer. Tu gardes le deuxième élément et tu le push_back dans un std::vector.
 
boost::tokenizer: http://www.boost.org/libs/tokenizer/index.html
std::vector:http://www.sgi.com/tech/stl/Vector.html

n°1690978
Player1979
Posté le 22-02-2008 à 19:21:05  profilanswer
 

Ok merci pour tes éléments de réponses. Je vais faire des recherches sur boost::tokenizer.

n°1691056
Player1979
Posté le 22-02-2008 à 21:45:57  profilanswer
 

Désolé, je rame toujours.

n°1691110
Player1979
Posté le 22-02-2008 à 23:57:56  profilanswer
 

Personne n'aurait d'autre proposition à me faire pour résoudre mon problème. Je souhaite utiliser uniquement la deuxième colonne pour remplir mon tableau S.
Merci et bonne nuit

n°1691157
Player1979
Posté le 23-02-2008 à 09:56:53  profilanswer
 

Bonjour,
Pas de réponses, toujours pas d'indice. Sinon, Joel ou quelqu un d'autre pourrait m'expliquer la méthode de tokenizer car je n'ai pas saisi.
Merci.

n°1691297
Player1979
Posté le 23-02-2008 à 17:17:14  profilanswer
 

Toujours pas d'éléments de réponse mise à part tokenizer ? Sinon je vais faire un simple copier/coller de ma colonne voulu dans un autre fichier et utiliser mon code ci dessus pour le remplir. Mais bon ce n'est pas pratique...
Merci tout de même d'essayer de m'aider.
Bonne soirée.

n°1691314
Joel F
Real men use unique_ptr
Posté le 23-02-2008 à 18:18:13  profilanswer
 

t'as quand même un exemple d'une trivialité sans nom avec tokenizer. Faudrait voir à lire les docs et cliquer sur les liens :o

n°1691332
Player1979
Posté le 23-02-2008 à 19:00:57  profilanswer
 

D'une trivialité sans nom certes mais ça dépend pour qui... Je suis allé consulter tes liens et d'autres documents d'ailleurs ! Ceux là ne m'ont pas permis d'assimiler cette notion ! Donc si tu as la gentillesse de m'éclairer, je suis preneur. Autrement, j'attends l'aide d'autres personnes plus explicites !

mood
Publicité
Posté le 23-02-2008 à 19:00:57  profilanswer
 

n°1691378
Joel F
Real men use unique_ptr
Posté le 23-02-2008 à 20:45:55  profilanswer
 

Rajoute à ta TODO LIST :
1/ apprendre l'anglais
2/ se sortir les doigts

 

Sinon :

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.   // on va dire que tes colonnes sont séparés par une TAB
  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.     if(tok_iter != tokens.end())
  22.     {
  23.       tok_iter++;
  24.       if(tok_iter != tokens.end()) colonne.push_back(*tok_iter);
  25.       else throw string("Fichier corrompu - 2e colonne manquante" );
  26.     }
  27.   }
  28.   return 0;
  29. }
 

:sarcastic:


Message édité par Joel F le 23-02-2008 à 20:46:42
n°1691400
Player1979
Posté le 23-02-2008 à 22:01:51  profilanswer
 

Ok merci, je vais étudier et essayer d'assimiler ton code afin de le comprendre. Je ne connais pas encore toutes les subtilités du C++. J'apprends... D'ailleurs, connaitrais tu un excellent livre de C++ pour approfondir mes connaissances.
Merci pour ton aide

n°1691407
Joel F
Real men use unique_ptr
Posté le 23-02-2008 à 23:31:05  profilanswer
 
n°1691586
Player1979
Posté le 24-02-2008 à 18:41:48  profilanswer
 

Merci

n°1744460
Zebulon88
Posté le 10-06-2008 à 22:49:19  profilanswer
 

Bonjour,
je suis désolé de faire remonter ce topic,  
mais je rencontre le meme problème mais en C++.NET, je travaille avec Visual C++ Express 2008 et la méthode de Joel F ne fonctionne pas dans ce cas.  
Pourriez vous m'aider s'il vous plait ?

n°1744474
Joel F
Real men use unique_ptr
Posté le 10-06-2008 à 23:24:29  profilanswer
 

C++.NET = CLI et code managé c'est bien ça ?
bah si c'ets le cas, c'ets DTC, car BOOST est une lib C++ pas C++.NET :/
doit bien avoir moult classe NET pr faire ça ?

n°1744534
Taz
bisounours-codeur
Posté le 11-06-2008 à 09:15:38  profilanswer
 

Joel F a écrit :

C++.NET = CLI et code managé c'est bien ça ?
bah si c'ets le cas, c'ets DTC, car BOOST est une lib C++ pas C++.NET :/
doit bien avoir moult classe NET pr faire ça ?


Je pense surtout que faire un #include<boost/*> ça marche pas chez lui comme par hasard.

n°1744607
Joel F
Real men use unique_ptr
Posté le 11-06-2008 à 11:07:52  profilanswer
 

ah oui aussi ^^

n°1744764
Zebulon88
Posté le 11-06-2008 à 13:58:44  profilanswer
 

Oui en effet Joel, je ne peux pas utiliser boost. Il faut utliser split().
 
Je n'arrive pas a faire fonctionner ce code qui est censé récuperer les donnes_en_z sur deux colonnes pour les mettre dans un autre fichier en une seule colonne (c'est un exemple). Il écrit uniquement la dernière ligne  de mon premier fichier.
 
Si quelqu'un connait le .net...:

Code :
  1. StreamReader^ sr2 = gcnew StreamReader("donnees_en_z.txt" );
  2. while ( sr2->Peek() >= 0 ){
  3. ligne = sr2->ReadLine();
  4. String^ words =ligne;
  5.    array<Char>^chars = {'\t'};
  6.    array<String^>^split = words->Split( chars );
  7.    System::Collections::IEnumerator^ myEnum = split->GetEnumerator();
  8.    StreamWriter^ sw3 = gcnew StreamWriter( "donnees_en_z_calcul.txt" );
  9.    while ( myEnum->MoveNext() )
  10.    {
  11.       String^ s = safe_cast<String^>(myEnum->Current);
  12.   sw3->WriteLine(s);
  13.           
  14.    }
  15.    sw3->Close();         
  16.  
  17. }
  18.  sr2->Close();


 
Merci beaucoup


Message édité par Zebulon88 le 11-06-2008 à 14:08:54
n°1744901
Taz
bisounours-codeur
Posté le 11-06-2008 à 16:09:55  profilanswer
 

/me tient les cheveux de Joel pendant qu'il vomit

Message cité 1 fois
Message édité par Taz le 11-06-2008 à 16:12:05
n°1749998
Joel F
Real men use unique_ptr
Posté le 23-06-2008 à 00:00:05  profilanswer
 

Taz a écrit :

/me tient les cheveux de Joel pendant qu'il vomit


je touche pas a cette came :o

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Sélectionner une colonne de données à partir d'un fichier TXT

 

Sujets relatifs
lecture de fichierLire un fichier .txt
Recherche de fichierRecherche de fichier, copie à l'aide d'une liste
[mySQL] structure de la base de données pour sondage multiplesExapmle de creation de fichier JNI
Envois de mails avec fichier(s) attache(s)Perl XSL, ne trouve pas le fichier xsl
Lecture fichier csvTransfert de fichier de PDA vers serveur sans Wifi
Plus de sujets relatifs à : Sélectionner une colonne de données à partir d'un fichier TXT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR