Bonsoir,
lors de l'execution de mon programme, une exception me stoppe la progression:
"terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr"
je voudrais savoir comment affecter chaque mot d'une chaine à une variable.
J'ai une fonction qui ouvre un fichier, le lit (ligne par ligne) et qui doit ensuite découper chaque ligne en mot, et affecter ces mots à une variable.
Le type "Evenement" est un enregistrement avec jour (int), heureDebut et heureFin (float) et abrege et description (string). La fonction doit ouvrir un fichier texte rédigé comme tel :
5 11 12 ARC Architecture_Rattrapage
3 17 18.5 CPT Comptabilite_Rattrapage
Je voudrais donc par exemple que 5 soit affecté à evenement.jour, 11 soit affecté à evenement.heureDebut etc...
Donc pour cela j'ai cette procédure,
Code C/C++ :
void lireFichierEvenements( Agenda &a) throw (string)
{
ifstream f;
f.open("test.txt");
string ch;
Evenement e;
if(f)
{
while (!f.eof())
{
string ligne;
getline(f, ligne);
e.jour = convertInt(ligne.substr(0, 1));
e.heureDebut = convertFloat(ligne.substr(2, 2));
e.heureFin = convertFloat(ligne.substr(5, 2));
e.abrege = ligne.substr(8, 3);
e.description = ligne.substr(12);
afficherEvenement(e);
}
}
else
{
cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
}
f.close();
}
ps: je teste la procédure sur un fichier ne contenant qu'une seule ligne pour le moment.
Le fichier texte est le suivant:
5 11 12 ARC Architecture_Rattrapage
Au resultat, le code nous affiche le résultat prévu (donc pas de problème jusque là) mais il y a quand même cette exception qui se lève.
Je ne comprends pas pourquoi, vu que je ne retire pas plus de caractères que ce que la chaine en contient.
Merci de votre aide =)