Parcourir un fichier en C++

Résolu/Fermé
raphi - 24 févr. 2009 à 14:34
 raphi - 24 févr. 2009 à 15:09
Bonjour,

Je fais actuellement un programme en C++ nommé IPCP qui charge sa configuration à partir du fichier de config.

La syntaxe du fichier de config est la suivante : dans chaque ligne tout ce qui est après le premier # est ignoré, et dans ce qui reste ce qui est avant le premier = est le nom de l'option et ce qui est après est sa valeur.

Pour faire simple je commence avec une seule option, backlog, dont la valeur est un int.

Donc dans le fichier de config j'ai mis :

backlog=5

J'ouvre le fichier avec fstream en lecture+écriture, je stocke toutes les lignes dans un vector<string> et après je parcours le vecteur pour parser chaque ligne une par une.

Seulement ça bugge ^^
Voici mon code :


#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

int stringToInt(string chaine);
long stringToLong(string chaine);
float stringToFloat(string chaine);
double stringToDouble(string chaine);
bool stringToBool(string chaine);

int main()
{
vector<string> config_ipcp;

cout << "Lancement de IPCP 0.1.1" << endl;
fstream fichier_config("config.ipcpcfg", ios::in | ios::out | ios::ate);
if (!fichier_config)
{
cout << "ERREUR lors du chargement du fichier de config" << endl;
return 1;
}
while (!fichier_config.eof())
{
config_ipcp.push_back("");
getline(fichier_config,config_ipcp.back());
cout << "Ligne actuelle : " << config_ipcp.back() << endl;
//int ligne=config_ipcp.size();
/*if (config_ipcp[ligne].empty())
{
config_ipcp.pop_back();
}*/
}
cout << "Nombre de lignes : " << config_ipcp.size() << endl;

return 0;
}


Donc là je ne fais qu'afficher chaque ligne puis le nombre de lignes.
Dans mon fichier j'ai mis 3 lignes et quand je teste ce code, il affiche une ligne vide ("Ligne actuelle : ") et à la fin il me dit "Nombre de lignes : 1".

Où est le problème et comment le régler ?
Merci beaucoup :D
Bonne journée !
A voir également:

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
24 févr. 2009 à 15:02
en ouvrant le fichier, tu utilises ios::ate. Or d'après sa définiition ( https://en.cppreference.com/w/cpp/io/ios_base/flags#mode_flags ) ceci place le fichier à la fin.
Il est normale que tu n'arrive pas à lire vu que tu es déjà à la fin.
0
Donc je dois juste mettre

ios::in | ios::out

Et c'est tout ? Même en lecture+écriture ??
0
Ah effectivement, ça marche maintenant (à part toujours une dernière ligne vide bizarre)...
Merci beaucoup :D
Bonne journée !
0