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 -
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.
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:
- Recuperer données d'un fichier txt C++
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
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 !!
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 !!
bonjour, tu fais du c ou du c++
car les fonctions FOPEN et FGETS par exemple ne sont plus vraiment utilisé par le c++
car les fonctions FOPEN et FGETS par exemple ne sont plus vraiment utilisé par le c++
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
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
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
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
de rien !
----------------------------------------------------------------------------------------------------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
----------------------------------------------------------------------------------------------------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
----------------------------------------------------------------------------------------------------------------
Création de site internet - Analyse et Développement de systèmes informatiques
https://www.itactiv.fr/ / http://www.itactiv.com
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
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
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
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
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
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
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