Réponse acceptée !
Utilise std::getline, il permet de lire des valeurs d'un flux (fichier ou flux de caractères), séparés par un délimiteur choisi.
Tu fais d'abord un std::getline avec un \n pour les sauts de lignes, ce qui te permet de récupérer les lignes une à une.
Puis, sur chacune de ces lignes, tu refais un std::getline avec un ' ' pour avoir chacun des mots.
Au lieu de t'embêter avec un tableau, utilise une liste (std::list) qui gère le redimensionnement et la mémoire pour toi.
Code C/C++ :
#include <fstream>
#include <iostream>
#include <sstream>
#include <list>
#include <cstdlib>
/* Convertit un string en n'importe quel type numérique */
template<typename T>
bool fromString(const std::string& str, T& dest)
{
std::istringstream iss(str);
return iss >> dest != 0;
}
int main()
{
std::list<double> tab;
std::ifstream fichier("fiche.txt");
if (!fichier)
{
std::cout << "fichier inexistant" << std::endl;
return 1;
}
std::string ligne;
while (std::getline(fichier, ligne))
{
std::istringstream buff(ligne);
std::string mot;
while (std::getline(buff, mot, ' '))
{
if (!mot.empty())
{
std::cout << "\"" << mot << "\"" << std::endl;
double f;
if (fromString(mot, f)) // Ajout uniquement si réussite de la conversion de string vers double
tab.push_back(f);
}
}
}
// Lecture du tableau, voir ce qu'est un itérateur
for (std::list<double>::const_iterator it = tab.begin();
it != tab.end(); ++it)
std::cout << *it << std::endl;
fichier.close();
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question