Ecrire dans un edit a partir d'un fichier texte a lire ligne pa ligne

cs_sarah62223 Messages postés 7 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 5 juin 2007 - 22 mai 2007 à 16:46
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 22 mai 2007 à 20:08
Bonjour

J'ai ecrit un programme pour venir lire dans un fichier ligne par ligne et de l'introduire dans un edit ,donc premiere ligne premier edit
deuxieme ligne deuxieme edit et troisieme ligne troisieme edit.
Le probleme c'est que mon programme ne vient que lire la premiere ligne et pas les suivantes et lorsque dans les edits sa inscrit la ligne il y a du texte suplementaire,je suis debutante en mfc donc j'ai un grand besion de votre aide
voici mon programme:

void CEcrire_editDlg::OnOK()
{
 // TODO: Add extra validation here
 
 // CDialog::OnOK();
 CFile f;
 CFileException e;
 char* pFileName = "C:\\Users\\sarah\\Desktop\\test1.txt";
 char pbuf [8];
 int i;
 if (f.Open(pFileName,CFile::modeRead,&e))
 {
  UpdateData (true);
  UINT nBytesRead = f.Read (pbuf,(sizeof(pbuf)));
  m_edit1 = pbuf;
  UpdateData (false);
  f.Close();
}
 
 
 
 if (f.Open (pFileName,CFile :: modeRead,&e))
 {
  UpdateData (true);
  UINT nBytesRead = f.Read (pbuf,(sizeof(pbuf)));
  m_edit2 = pbuf;
  UpdateData (false );
  f.Close ();
 }
 if (f.Open (pFileName,CFile :: modeRead,&e))
 {
  UpdateData (true);
  UINT nBytesRead = f.Read (pbuf,(sizeof (pbuf)));
  m_edit3 = pbuf;
  UpdateData (false);
  f.Close ();
 }
}

 Et voila ce que cela donne dans l'interface:

1er edit :Bonjours ØSA
2eme edit:BonjoursØSA, la je devrais avoir comment allez vous
3eme edit: BonjoursØSA, la moi ca va merci
ceci et a titre d'exemple puisque normalement je vais venir y mettre des codes defaut,le second probleme et ØSA je sais pas d'ou sa vient.

4 réponses

Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
22 mai 2007 à 16:55
tu as trois fois le même texte car tu fais trois fois la même chose...
à chaque fois que tu ouvres un livre, tu commences à la première page s'il n'y a pas de marque-page
ben là c'est pareil.
tu ouvres ton fichier tu lis une ligne et tu fermes. le coup d'après il fait pareil. et toujours avec la première ligne...

pour les signes kaballistiques il te manque certainement un code de fin de chaine '\0' quelquepart

Loki
0
cs_sarah62223 Messages postés 7 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 5 juin 2007
22 mai 2007 à 17:00
c cool de me reondre mais sa ne m avance pas plus, si pourla fin de chaine mais le probleme c'est que je suis debutante en visual c++ mfc et c'est pas evident.
Merci quand meme
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
22 mai 2007 à 17:24
je n'utilise pas cette classe (CFile) mais apparemment d'après la MSDN, la fonction membre Read() lit le fichier jusqu'à plus soif, autrement dit il lit nb caractères et les stocke dans buffer lorsque tu mets : f.Read(buffer,nb);
ca précise aussi que si nb est supérieur au nombre de caractères total, le retour de la fonction sera inférieur à nb.
p-e devrais tu :
1 - lire tout le fichier et séparer ensuite ligne par ligne en scannant la chaine (cf. '\n')
2 - ou alors lire caractère par caractère et t'arrêter lorsque tu trouves ce fameux caractère de fin de ligne, apparemment, à chaque lecture, la fonction repart de la dernière position atteinte.

dans le cas 1, tu peux ensuite faire f.Close();
pour le cas 2, surtout pas le faire, sinon tu perds ta position de curseur. Lorsque tu as fini de lire ton fichier alors tu peux le fermer.

est ce que ca t'aide un peu plus ?

Loki
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mai 2007 à 20:08
Tu dois lire 3 fois 8 octets, bien ça ???


HANDLE hfl;
DWORD d;
char buf[28];
hfl = CreateFile("C:\\Users\\sarah\\Desktop\\test1.txt",
                 GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hfl == INVALID_HANDLE_VALUE) return;
ReadFile(hfl, buf, 24, &d, 0)
CloseHandle(hfl);
buf[d] = 0;
if(d >= 16) ::SetWindowText(hed3, buf + 16);
if(d >= 8) {
  buf[16] = 0;
  ::SetWindowText(hed2, buf + 8);
}
if(d) {
  buf[8] = 0;
  ::SetWindowText(hed1, buf);
}


Devrait aller, à tester.
Aucune gestion d'exception, c'est très couteux en cycles.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous