Rechercher : dans
Par :

Parcourir un fichier en C++

Dernière réponse le 24 fév 2009 à 15:09:19 raphi, le 24 fév 2009 à 14:34:21 
 Signaler ce message aux modérateurs

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 !

Configuration: Linux
Opera 9.63

Meilleures réponses pour « Parcourir un fichier en C++ » dans :
Entrées/sorties : Les flux en C++ VoirEntrées/sorties : les flux en C++ 1. Ouvrir un fichier en lecture 1.1 Ouverture du fichier "donnees.txt" en lecture 1.2 Lecture du contenu de "donnees.txt" 2. Ouvrir un fichier en écriture 2.1 Ouverture du fichier "donnees.txt" en...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
UNIX - Les fichiers VoirIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de...

1

Char Snipeur, le 24 fév 2009 à 15:02:15

En ouvrant le fichier, tu utilises ios::ate. Or d'après sa définiition ( http://www.cppreference.com/wiki/io/io_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. Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

2

raphi, le 24 fév 2009 à 15:06:53

Donc je dois juste mettre

ios::in | ios::out

Et c'est tout ? Même en lecture+écriture ??

Répondre à raphi

3

 raphi, le 24 fév 2009 à 15:09:19

Ah effectivement, ça marche maintenant (à part toujours une dernière ligne vide bizarre)...
Merci beaucoup :D
Bonne journée !

Répondre à raphi
Collection CommentÇaMarche.net