Lecture ligne par ligne d'un fichier texte [Résolu]

Signaler
Messages postés
47
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
29 juin 2005
-
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
-
Bonjour à tous, je sais comment on fait pour lire un fichier ligne par ligne mais je cherche à lire une ligne particulière pour ensuite récupérer sa valeur et la mettre dans une variable...

Voici le contenu de mon fichier :
caractere : 83
sociabilite : 76
faim : 83
saleté : 83
sante : 76
points de vie : 14986
points d'évolution : 14
temps écoulé : 14

et je cherche à récupérer le 14 de temps écoulé...

Merci d'avance

8 réponses

Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Un peu de rigueur Aldarek...

Je ne vois pas le lien entre ligne et line, c'est normal docteur??



Essaie ça:



#include <fstream>



...

std::ifstream file; // fichier dans lequel on va lire

char line[128]; // ligne lue

int tps; // temps lu



file.open("D:\\Bruno\\truc.txt"); // ouverture du fichier



while(file.getline(line, 128,'\n')) // à chaque lecture de ligne

{

if (NULL!=strstr(line, "temps écoulé")) // on cherche la chaine "temp écoulé"

{

sscanf(line,"temps écoulé : %d", &tps); // si trouvé, on lit l'entier voulu

...

}

}





Dans mon fichier truc.txt, j'ai mis:

bou : 45

temps écoulé : 14



Et le résultat de mon code est satisfaisant: tps=14



Si t'as d'autres soucis....



Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Et pourquoi tu ne compterais pas les '\n' ???


void Aurevoir( void ); //Bonne journée
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
int tps;

char line[128];



/* tu remplis line avec une ligne du fichier */



if (NULL!=strstr(line, "temps écoulé")) // cherche si la ligne courante contient la chaine "temps écoulé"

sscanf(line,"temps écoulé : %d", &tps); // si oui, tu connais le format de ta ligne donc tu peux récupérer l'entier


Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
Messages postés
47
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
29 juin 2005

Ton idée me semble parfaite merci beaucoup, seulement je l'ai testé, voici le code, et il n'arrive pas à me trouver le 14 :

std::ifstream fichier("resultat.txt");
int tps=0;
char line[128]; //tableau de caractère ou l'on va stocker la ligne


if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
{
// cette boucle s'arrête dès qu'une erreur de lecture survient
if (NULL!=strstr(line, "temps écoulé"))
{
sscanf(line,"temps écoulé : %d", &tps);
}
cout<<tps<<endl;
}

Merci beaucoup
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Et oui...

T'as oublié de lire dans le fichier... et donc de remplir line!!


Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
Messages postés
47
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
29 juin 2005

Il faut que je fasse un getline c'est bien ca??

std::getline( fichier, line );
Messages postés
47
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
29 juin 2005

Désolé de t'embêter avec ca mais je vois vraiment pas ce qui ne marche pas
Voici le code :
if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
{
std::string ligne; // variable contenant chaque ligne lue


// cette boucle s'arrête dès qu'une erreur de lecture survient
while ( std::getline( fichier, ligne ) )
{
if (NULL!=strstr(line, "temps écoulé"))
{
sscanf(line,"temps écoulé : %d", &tps);
cout<<"récup tps"<<tps<<endl;
}
}
}

Merci d'avance
Messages postés
47
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
29 juin 2005

Rajout: le line est un char[128]et temps un int =0;