Rechercher : dans
Par :

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

Dernière réponse le 30 jun 2008 à 14:45:51 CicinhoRaul, le 30 jun 2008 à 10:02:46 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Recuperer données d'un fichier txt C++ » dans :
[Word] Récupérer un fichier impossible à ouvrir VoirCertains gros fichiers contenant des images généralement, se mettent parfois de façon "irrationnelle" à faire bloquer Word lorsqu'on veut les modifier. Pour les récupérer, il existe une méthode non-garantie : Ouvrir le fichier et l'enregistrer...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.

1

-----coco-----, le 30 jun 2008 à 10:16:09

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 !!

Répondre à -----coco-----

2

CicinhoRaul, le 30 jun 2008 à 10:20:46

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

Répondre à CicinhoRaul

3

91dj85, le 30 jun 2008 à 10:29:14

Bonjour, tu fais du c ou du c++
car les fonctions FOPEN et FGETS par exemple ne sont plus vraiment utilisé par le c++

Répondre à 91dj85

4

CicinhoRaul, le 30 jun 2008 à 10:37:08

Slt 91dj85 je programme en C++

Répondre à CicinhoRaul

5

91dj85, le 30 jun 2008 à 10:43:53

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
http://www.itactiv.fr / http://www.itactiv.com

Répondre à 91dj85

6

CicinhoRaul, le 30 jun 2008 à 11:41:54

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

Répondre à CicinhoRaul

7

91dj85, le 30 jun 2008 à 11:45:58

Quand tu fais le getline tu obtiens bien toute la ligne ?


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

Répondre à 91dj85

8

CicinhoRaul, le 30 jun 2008 à 11:52:24

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

Répondre à CicinhoRaul

9

91dj85, le 30 jun 2008 à 11:58:33

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
http://www.itactiv.fr / http://www.itactiv.com

Répondre à 91dj85

10

CicinhoRaul, le 30 jun 2008 à 12:01:05

Salut,
malheureusement,il ne trouve pas le mot Name.

Répondre à CicinhoRaul

11

91dj85, le 30 jun 2008 à 12:10:37

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
http://www.itactiv.fr / http://www.itactiv.com

Répondre à 91dj85

12

CicinhoRaul, le 30 jun 2008 à 12:16:14

Oui avec ce code il affiche bien tout le fichier mais je me demande si :

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

doit etre en dehors de la boucle ?

Répondre à CicinhoRaul

13

91dj85, le 30 jun 2008 à 12:21:02

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
http://www.itactiv.fr / http://www.itactiv.com

Répondre à 91dj85

15

CicinhoRaul, le 30 jun 2008 à 12:28:54

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 !

Répondre à CicinhoRaul

16

 91dj85, le 30 jun 2008 à 14:45:51

De rien !


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

Répondre à 91dj85

14

91dj85, le 30 jun 2008 à 12:25:03

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
http://www.itactiv.fr / http://www.itactiv.com

Répondre à 91dj85
Collection CommentÇaMarche.net