Recuperer données d'un fichier txt C++

CicinhoRaul Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   -  
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'essaie de lire un fichier txt en C++ du type :

[Nom]= toto
[Prenom]= titi
Age = "24"

Je souhaiterais recuperer toto,titi,24 et les mettre dans une structure.Mais je ne sais pas comment les récuperer du tout avec getline ou une autre fonction.
Voici mon code
FILE* file = fopen("fichier.txt", "r");
char szLine[256];
char szFind[] = "Nom";
while(fgets(szLine, 256, file) != NULL)
{
if(strstr(szLine, szFind) != NULL)
{
printf(szLine);
break;
}
}

Merci pour votre aide et desolé du dérangement.
A voir également:

5 réponses

-----coco----- Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   25
 
bonjour,

si c'est toi qui as enregistrer les variable dans le txt, tu peux faire un scanf, je sais, on l'utilise beaucoup plus en C mais ca marche quand meme !!
ca marche comme en console, tu met par exemple :

scanf(nomDuTxt, "%c %c %ld", nom, prenom, age);

si dans ton txt c'est ecrit :

dupont jean 24

si j'ai pu t'aider, j'en suis content...
sinon bon courage pour tes recherches !!
0
CicinhoRaul Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   7
 
Salut coco, tout d'abord merci pour ta reponse c'est vraiment sympa. Mais le probleme est que je veux extraire toto à partir de Nom ,titi à partir de Prenom .

J'ai [Nom] = toto et il faut que je repere le mot "Nom" compris entre 2 crochets et récuperer la valeur toto situé après le '='. Je ne sais pas comment coder cela.
Voila. Merci
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1
 
bonjour, tu fais du c ou du c++
car les fonctions FOPEN et FGETS par exemple ne sont plus vraiment utilisé par le c++
0
CicinhoRaul
 
Slt 91dj85 je programme en C++
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1 > CicinhoRaul
 
dans ce cas utilise la classe string pour les chaines de caractères
et la classe fstream pour lire dans les fichiers

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

ifstream ifs("fichier.txt");
while(!ifs.eof())
{
string line;
getline(ifs,line);

/* traitement de line (contient une ligne : [Nom]=toto */
/* la classe string permet facilement de traiter une chaine de caractère */
/* line.find(...); line.substr(...), il suffit d'un peu d'imagination */

}

il me semble qu'avec ca tu peux faire ce que tu veux.


----------------------------------------------------------------------------------------------------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1
 
et bien non !

string line;
while(!ifs.eof())
{
getline(ifs,line);

if(line.find("[Name]=") == 0)
{
// trouvé
cout<<"trouvé"<<endl;
//traitement
string value = line.substr(7, line.length());
cout<<"Name = "<<value;
}


}

------------------------------------------------------------------------------------------­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0
CicinhoRaul
 
91dj85, tout simplement bravo et mille mercis !!!! C vraiment trop sympa de ta part. Ca marche !!!
Désolé de t'avoir autant dérangé.


Maintenant l'idéal est de ranger toutes ces valeurs dans une structure ou une classe.
Donc je vais essayer d'avancer.

Encore merci !
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1 > CicinhoRaul
 
de rien !


------------------------------------------------------------------------------------------­­­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1
 
tu peux aussi découper de la sorte


string key, value;

if(line.find("]=")<line.length() && line[0]=="[")
{
key = line.substr(1 , line.find("]=")-1); // contiendra Name
value = line.substr( line.find("]=") + 2, line.length()); // Contiendra toto
}


------------------------------------------------------------------------------------------­­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CicinhoRaul
 
Merci 91dj85 mais je n'y arrive pas

J'ai essayer de faire comme cela :

Sachant que l'on a : Name = toto@yahoo.fr

std::string line;
getline(ifs,line);
line.find("Name");
line.substr(5,line.length()-5);
std::cout << line << '\n';

Mais je n'obtiens rien du tout :(:(

Merci d'avance
-1
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1
 
quand tu fais le getline tu obtiens bien toute la ligne ?


------------------------------------------------------------------------------------------­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0
CicinhoRaul > 91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Non meme pas malheureusement.

Mon fichier est de ce genre :

# Fichier .txt
################
##Crée le 30/6/2008


Puis j'ai differents parametres de la forme :
Name = toto@yahoo.fr


Et lorsque je tape
std::string line;
getline(ifs,line);
line.find("Name");
line.substr(5,line.length()-5);
std::cout << line << '\n';
Je n'obtiens rien hormis les premieres lignes que je t'ai indique au dessus. :S

Je suis désolé mais je n'y arrive pas du tout
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1 > CicinhoRaul
 
ta ligne line.find("Name"); ne sert a rien

il faut faire un test du genre :
if(line.find("Name") == 0)
cout<<"trouve"<<endl;
else
cout<<"pas trouve"<<endl;

fait ce test sur la boucle !ifs.eof() boucle et dit moi si il affiche trouvé a un moment



------------------------------------------------------------------------------------------­­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0
CicinhoRaul > 91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
malheureusement,il ne trouve pas le mot Name.
0
91dj85 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   1 > CicinhoRaul
 
tu as pas mis un faute de frappe ou majuscule !

sinon je pense qu'il faut comprendre d'où vient le problème

essai :

while(!ifs.eof())
{
string line;
getline(ifs,line);
cout<<line<<endl;
}

est-ce que ça affiche tout le fichier ?
sinon tu a besoin peut etre de déplacer le curseur de lecture a la fin de la boucle while :

ifs.seekg(ifs.tellg()+1);


------------------------------------------------------------------------------------------­­----------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
0