Lecture fichier texte en c++ builder ( débutant )

m1b
Messages postés
2
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
9 février 2006
- 8 févr. 2006 à 23:04
hamidkhelifa
Messages postés
10
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
21 juin 2006
- 14 févr. 2006 à 22:31
Hello,



Je sais il y a beaucoup de post sur la lecture des fichiers
textes, je les ai lus mais je n'ai pas réussi à m'en sortir... ( je
suis débutant en c++ ) En gros voilà ce qui se passe,j'ai créer
une fenètre avec 2 boutons je presse sur mon bouton 1
ça me crée un fichier test.txt dans c: Ok c'est bon. Ensuite un autre
bouton lorsque je clique va lire le fichier texte et afficher son
contenu dans un champ , mais ce qui se passe avec ma boucle c'est qu'il
arrive sur la dernière ligne du fichier texte sur "
1926 Fully" et il ne m affiche que
1926 Fully
dans mon champ, et je n 'arrive pas à comprendre pourquoi les autre lignes ne sont pas affichées...



si vous pouviez me donner un coup de pouce ça serait super





Voilà le code ( plus bas encore il y a un second code j 'ai essayé
d'une autre manière mais je pense que le plus facile à corriger c'est
le code 1 le 2 eme je l'ai juste mis comme ça pour voir...) pour ce
code 1 il ne doit pas manqué beaucoup pour que le programme
fonctionne...



merci de votre aide









CODE 1



//---------------------------------------------------------------------------

#include <string>

#include <fstream>

#include

#include <vcl.h>

#pragma hdrstop

#include <stdio> // insertion de la librairie stdio

#include "projetcreation.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TUfmMain *UfmMain;

//---------------------------------------------------------------------------

__fastcall TUfmMain::TUfmMain(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TUfmMain::BuCreatClick(TObject *Sender)

{



FILE* fichierRapport = NULL; // déclaration de mon fichier

fichierRapport = fopen("C:\\test.txt", "w"); // création du fichier puis, puis accès en écriture



fprintf(fichierRapport, "Germain\n " );

fprintf(fichierRapport, "\n Carron ");

fprintf(fichierRapport, "\n Av de la Gare ");

fprintf(fichierRapport, "\n 1926 Fully");





fclose(fichierRapport); // fermeture du fichier, ne pas oublier



}



//---------------------------------------------------------------------------



void __fastcall TUfmMain::buLireClick(TObject *Sender)

{

std::ifstream fichierRapport("C:/test.txt");



if (!fichierRapport)

{

// Erreur d'ouverture de fichier

}



std::string ligne ; // variable qui contient la ligne lue



while (std::getline(fichierRapport, ligne)) // ligne qui est toujours ma variable qui stock les données

{

std::cout << ligne << std::endl;



}



edResult->Text = ligne.c_str();

}

//---------------------------------------------------------------------------





CODE 2 ( ESSAI d'une autre manière )



//---------------------------------------------------------------------------

#include <string>

#include <fstream>

#include

#include <vcl.h>

#pragma hdrstop

#include <stdio> // insertion de la librairie stdio

#include "projetcreation.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TUfmMain *UfmMain;

//---------------------------------------------------------------------------

__fastcall TUfmMain::TUfmMain(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TUfmMain::BuCreatClick(TObject *Sender)

{



FILE* fichierRapport = NULL; // déclaration de mon fichier

fichierRapport = fopen("C:\\test.txt", "w"); // création du fichier puis, puis accès en écriture



fprintf(fichierRapport, "Germain\n " );

fprintf(fichierRapport, "\n Tenthorey ");

fprintf(fichierRapport, "\n Ruelle des Cartes 19 ");

fprintf(fichierRapport, "\n 1926 Fully");





fclose(fichierRapport); // fermeture du fichier, ne pas oublier



}



//---------------------------------------------------------------------------



void __fastcall TUfmMain::buLireClick(TObject *Sender)

{

FILE* fichierRapport ;

char szBuffer;



if(( fichierRapport = fopen("fichier.txt", "r")) != NULL ) // on ouvre le fichier



{

while (!feof(fichierRapport))

{

fread(&szBuffer, 1, 1, fichierRapport);



if(szBuffer == '\0') //si c'est la fin de la ligne

printf("\n"); //on "affiche" un saut de ligne

printf("%c", szBuffer); //on affiche ce que contient le buffer



}



}







edResult->Text = szBuffer;

fclose(fichierRapport);

4 réponses

Dvdmizo
Messages postés
74
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
3 mai 2006

9 févr. 2006 à 14:26
salut,



je pense que ton problème vient du fait que tu utilises un composant
TEdit pour faire tes affichages. Ce composant n'est pas multilignes
donc il ne t'affiche pas tout ça me parait normal de plus tu fais ceci :



while (std::getline(fichierRapport, ligne)) // tu lis une ligne
{

std::cout << ligne
<< std::endl; // tu l'affiches ? (c'est pas vraiment
l'idéal avec C++ Builder)
//
et tu boucles tant qu'il reste des lignes à lire en écrasant à chaque
fois l'ancienne ligne dans ta variable
}


// donc forcément quand tu arrives ici, ta variable ne contient plus que la dernière ligne
edResult->Text = ligne.c_str();




Essaye de placer un TMemo sur ta fiche et de lui affecter ce que tu lis depuis ton fichier :



// ici le Memo s'appelle par exemple : Memo1



while (std::getline(fichierRapport, ligne))
{
Memo1->Lines->Add(ligne) ; // on ajoute la ligne lue au memo
}





j'espère que ça t'aidera


DvdMizo
0
m1b
Messages postés
2
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
9 février 2006

9 févr. 2006 à 17:56
merci bien , j'ai modifier encore certaines chose et maintenant c'est
ok, il faut que je trouve encore des informations sur comment
traiter le texte de manière à ce qu'il le lise sur une seule ligne
maintenant il le lit

xxxxxx

xxxxx

xxxxxx

xxxxx



et il faut que j'arrive à xxxxxxx xxxxxxx xxxxxx xxxxxx

je pense que je doit dire supprime "/n" ou ne tient pas compte de "/n"
0
hamidkhelifa
Messages postés
10
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
21 juin 2006

14 févr. 2006 à 22:06
Salut!!!
en faite tu peut aussi mettre ton fichier sure uneligne dans un Tedit
edResult->Text = ligne.c_str();cette ligne de code permet d'ecrire un texte sur la ligne existante ..c pour ça que a la fin tu n'a que la dernier ligne sur ton Tedit
le code corecte c cette ligne edResult->Text=edResult->Text+ligne.c_str();
ça te permet de adiciner toute les ligne sur un Tedit.
0
hamidkhelifa
Messages postés
10
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
21 juin 2006

14 févr. 2006 à 22:31
ehhh e si tu veut separer les ligne avec un espace il faut mettre +" " a la fin
edResult->Text=edResult->Text+ligne.c_str()+" ";
0