Comment récupérer la deuxième colonne d'un fichier .txt en C++.NET [Résolu]

Signaler
Messages postés
32
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
4 mai 2011
-
Messages postés
32
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
4 mai 2011
-
Bonjour à tous,

Je n'arrive pas à récupérer la deuxième colonne (séparé par une tab de la première colonne) d'un fichier .txt en C++.NET et à la mettre dans un vecteur.
Je précise que je code en .NET avec Visual C++ 2008 Express ce qui complique beaucoup la chose...
Je peux récupérer la n ième ligne il faut mainteant que je prenne le deuxième terme de la ligne.

On peut utiliser Tokenizer mais je n'arrive pas à l'adapter en C++.NET
Je débute en C++..

j'ai trouvé cette méthode mais elle ne fonctionne pas en .NET :

<ol class= "olcode" id="code1"><li>#include <vector>
</li><li>#include <string>
</li><li>#include <fstream>
</li><li>#include
</li><li></li><li>using namespace std;
</li><li>using namespace boost;
</li><li></li><li>int main()
</li><li>{
</li><li>  vector<string> colonne;
</li><li>  string ligne;
</li><li>  ofstream fichier("truc.txt" );
</li><li></li><li>  while (getline (fichier, ligne))
</li><li>  {
</li><li>    typedef boost::tokenizerchar> > tokenizer;
</li><li>    boost::char_separator<char> sep("\t" );
</li><li></li><li>    // tokenisation de la ligne courante </li><li>    tokenizer tokens(ligne, sep);
</li><li></li><li>    // Recup des tokens via un token_iterator</li><li>    tokenizer::iterator tok_iter = tokens.begin();
</li><li>    if(tok_iter != tokens.end())
</li><li>    {
</li><li>      tok_iter++;
</li><li>      if(tok_iter != tokens.end()) colonne.push_back(*tok_iter);
</li><li>      elsethrow string("Fichier corrompu - 2e colonne manquante" );
</li><li>    }
</li><li>  }
</li><li></li><li>  return 0;
</li><li>}</li></ol>

Pourriez vous m'aider s'il vous plait?

Merci beaucoup

6 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
J'ai testé le code avec boost, il fonctionne bien. Mais, tu peux t'en passer :

#include <vector>
#include <string>
#include <sstream>
#include <fstream>
#include

int main()
{
    std::vector<std::string> colonne;
    std::string ligne;
    std::ifstream fichier("truc.txt" );
    std::string mot;

    while ( std::getline( fichier , ligne) )
    {
        std::istringstream iss( ligne );
        iss >> mot >> mot ;
        colonne.push_back( mot );
    }
    return 0;
}
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Ce code utilise la librairie BOOST que tu dois installer. Voir site de "boost consulting".
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Sinon, c'est pas ofstream, mais ifstream ( fichier en lecture ).
Messages postés
32
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
4 mai 2011

Bonjour Lucky92,

Ta solution à mon problème est d'une simplicité écoeurante...
Merci beaucoup. (j'étais absent les qq jours précdents)

Je ne sais pas pourquoi ca marchait pas avec boost j'avais bien mis les librairies.

En tout cas merci, j'étais parti sur un genre de solution :
avec des :
StreamReader^ srz = gcnew StreamReader("donnees_en_z.txt");
et des split(), array<String^>^splitz;
        array<String^>^splitk;
    System::Collections::IEnumerator^ myEnumz;

ce qui donne un truc du genre (qui marche pas) :
            while(srk->Peek() >= 0)              
            {   linek = srk->ReadLine();
                splitk = linek->Split(chars);
                myEnumk = splitk->GetEnumerator();
                if(cptligne==4)
                {    StreamReader^ srk = gcnew StreamReader("donnees_en_k.txt");
                    std::ofstream file1( "matrice_w.txt", std::ios_base::app );
                    cptligne=1;file1<<"\n";
                    }else{cptligne++;}
                while ( myEnumk->MoveNext())
                { 
etc..........

Peux tu m'expliquer l'utilité des streamReader en .NET, cela me semble bcp plus compliqué?

Zebul
                 
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Bonjour,

Heureux que ça t'ait dépanné.

Désolé, je ne connais pas les "streamReader" : c'est du C++ managé,  un langage 100% Microsoft .NET, trés différent du c++ standard ; d'ailleurs, le mélange de technologies, std::ofstream et streamReader, a trés peu de chance d'aboutir !!!

Bonne continuation...
Messages postés
32
Date d'inscription
jeudi 5 juin 2008
Statut
Membre
Dernière intervention
4 mai 2011

Merci.
Sais tu s'il y a un moyen simple pour écrire au début d'un fichier?
J'ai des calculs à faire et le dernier résultat doit se trouver en premier.
(Je ne souhaite pas mettre ca dans un buffer mais l'écrire au fur a mesure)
je n'arrive pas avec seek

Merci de ton aide