Comment récupérer données dans un fichier .txt en C++

Fermé
fzheng2015 Messages postés 1 Date d'inscription dimanche 24 avril 2016 Statut Membre Dernière intervention 24 avril 2016 - Modifié par crapoulou le 27/04/2016 à 13:29
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 4 mai 2016 à 07:53
bonjour,

je voudrais savoir comment on fait pour récupérer une donnée d'un fichier en c++. Par exemple : le fichier contient les nombres suivant : 12 45 63 85.

Je sais que le fichier contient le nombre 63 et je veut stocker le nombre suivant dans une variable. J'ai pensé à passer par "find":
int main()
{
 
    ifstream fichier ("D:/test.txt");
    size_t found;
    double c(0), str(63);
    string a, b;
    string ligne;
    if (fichier)
    {
         while(getline(fichier, ligne))
        {
                a += ligne + " " ;
        }
        found = a.find(str);
        c = found;
        monFlux.seekg(c, ios::beg);
        monFlux >> b;
        cout << b << endl;
    }
 
    return 0;
}

Sans succès la console ne m'affiche rien.

Est-ce que vous savez comment on pourrait s'y prendre ? Merci beaucoup.
A voir également:

2 réponses

stavax Messages postés 25 Date d'inscription lundi 2 mai 2016 Statut Membre Dernière intervention 2 mai 2016
2 mai 2016 à 12:21
Bonjour,

Faire un double str(63) n'a aucune sens.
a.find('63') serait plus adéquate içi.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié par Dalfab le 4/05/2016 à 07:57
Bonjour,

Rechercher la chaîne "63" serait faux, supposons que le nombre 631 soit présent, on extrairait le 1.
Si on est sûr que 63 n'est pas le premier et qu'il est suivi, on fait :
a.find( " 63 " ).

On peut sinon lire les nombres un à un jusqu'au 63, puis lire le suivant.

Voire tout lire en mémoire dans un vector<>
    std::string ligne;
std::vector<int> listeDeNombres;

while ( std::getline(fichier, ligne) ) {
std::istringstream iss(ligne);
// tous les nombres de la ligne mis dans le vector<>
std::copy( std::istream_iterator<int>(iss),
std::istream_iterator<int>(),
std::back_inserter(listeDeNombres));
}
// recherche de 63
auto itm = std::find(listeDeNombres.begin(),listeDeNombres.end(), 63);
// et prendre le suivant
if ( itm != listeDeNombres.end() ) {
++itm;
if ( itm != listeDeNombres.end() )
std::cout << *itm << std::endl;
else
std::cout << "rien apres\n";
}
else
std::cout << "pas de 63 dans le fichier\n";
0