lire dans un fichier texte

lire dans un fichier texte - C++ - Programmation

Marsh Posté le 18-06-2002 à 09:50:08    

Bonjour,
 
j'aimerais lire dans un fichier texte et remplir un tableau de structure avec chaque ligne de ce fichier. Ci dessous le n'importe quoi que j'ai tenté (copier/coller maladroit de l'écriture dans le fichier) :heink:  
 
  FILE *f;
  if ((f=fopen("D:\fichier.txt","rt" ))==NULL)
    throw Sysutils::Exception("Impossible de lire le fichier" );
 
  while (!eof)
  {
    fprintf(f,"%s",(Tab[i].Nom + "\n" + Tab[i].Prenom + "\n" + Tab[i].Tel + "\n\n" ));
  i++;
  }
 
  fclose(f);
 
Le fichier texte ressemble à ça:  
nom
prenom
tel
 
nom
prenom
tel
 
etc...
 
Merci d'aider un débutant qui passe l'exam demain...  :pt1cable:

Reply

Marsh Posté le 18-06-2002 à 09:50:08   

Reply

Marsh Posté le 18-06-2002 à 10:02:41    

mik38 a écrit a écrit :

Bonjour,
 
j'aimerais lire dans un fichier texte et remplir un tableau de structure avec chaque ligne de ce fichier. Ci dessous le n'importe quoi que j'ai tenté (copier/coller maladroit de l'écriture dans le fichier) :heink:  
 
  FILE *f;
  if ((f=fopen("D:\fichier.txt","rt" ))==NULL)
    throw Sysutils::Exception("Impossible de lire le fichier" );
 
  while (!eof)
  {
    fprintf(f,"%s",(Tab[i].Nom + "\n" + Tab[i].Prenom + "\n" + Tab[i].Tel + "\n\n" ));
  i++;
  }
 
  fclose(f);
 
Le fichier texte ressemble à ça:  
nom
prenom
tel
 
nom
prenom
tel
 
etc...
 
Merci d'aider un débutant qui passe l'exam demain...  :pt1cable:  




Effectivement c'est n'importe quoi, bon alors regarde du côté des objet fstream (puisque apparement tu essaye de faire ça en C++).
Âller un petit exemple pour la route:
 

Code :
  1. #include <fstream>
  2. #include <string>
  3. using namespace std;
  4. int main(int,char**)
  5. {
  6.   ifstream file("D:\\fichier.txt",io_base::in); //ouvre le fichier.
  7.   string nom;
  8.   file >> nom; //lit une entrée
  9.   cout << nom; //pour voir le truc
  10.   file.close(); // ferme le fichier     
  11. }


Message édité par LetoII le 18-06-2002 à 10:02:54

---------------
Le Tyran
Reply

Marsh Posté le 18-06-2002 à 10:10:48    

pourquoi je ne peux pas le faire avec fopen?  :??:

Reply

Marsh Posté le 18-06-2002 à 10:17:26    

Ben tu peux mais bon autant faire quelquechose d'homogène, tout en C ou tout en C++.
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   int   retval;
  5.   FILE *file = fopen("fichier.txt","r" );
  6.   if(file)
  7.    {
  8.      char nom[512];
  9.      fgets(nom,512,file);
  10.      puts(nom);
  11.      retval = 0;
  12.    }
  13.   else
  14.    {
  15.      retval = -1;
  16.    }
  17.   return retval;
  18. }


---------------
Le Tyran
Reply

Marsh Posté le 18-06-2002 à 10:28:03    

Si je comprend bien fopen c'est du C et ta permiere solution du  
C++. :heink:  
Merci pour ton exemple mais comment parcourir tout le fichier jusqu'a la fin et remplir mon tableau de structure?
(en sachant qu'il y a une ligne de saute entre les differents enregistrements)  :??:

Reply

Marsh Posté le 18-06-2002 à 10:48:16    

tu as le choix de format pour le fichier txt ?
 
style:
nom,prenom,tel
nom,prenom,tel
 
 
etc..

Reply

Marsh Posté le 18-06-2002 à 10:53:31    

Cherche du côté de strtok (string.h)


---------------
Le Tyran
Reply

Marsh Posté le 18-06-2002 à 14:17:28    

Il faut que je fasse simple, fprintf marchait mais fscanf me fait une violation d'accès  :fou:  
Please help me.. :pt1cable:  
 
[cpp]  FILE *f;
  if ((f=fopen("Liste Generale.txt","r+" ))==NULL)
    throw Sysutils::Exception("Impossible de lire le fichier" );
 
  while (!feof())
  {
    fscanf(f,"%s",Tab[i].Nom);
    i++;
  }
  fclose(f);

Reply

Marsh Posté le 18-06-2002 à 15:40:16    

...


Message édité par paranoidandroid le 18-06-2002 à 15:44:45
Reply

Marsh Posté le 18-06-2002 à 15:44:29    

Je voulais poster un noiuveau message ... j'ai répondu a celui ci ..
 
désolé

Reply

Marsh Posté le 18-06-2002 à 15:44:29   

Reply

Marsh Posté le 18-06-2002 à 16:10:20    

mik38 a écrit a écrit :

Il faut que je fasse simple, fprintf marchait mais fscanf me fait une violation d'accès  :fou:  
Please help me.. :pt1cable:  
 

Code :
  1. FILE *f;
  2.   if ((f=fopen("Liste Generale.txt","r+" ))==NULL)
  3.     throw Sysutils::Exception("Impossible de lire le fichier" );
  4.   while (!feof())
  5.   {
  6.     fscanf(f,"%s",Tab[i].Nom);
  7.     i++;
  8.   }
  9.   fclose(f);






 

Code :
  1. FILE *f;
  2.   if ((f=fopen ("Liste Generale.txt","r+" ))==NULL)
  3.     throw Sysutils::Exception("Impossible de lire le fichier" );
  4.   fseek (f, 0, SEEK_SET)   // place le pointeur de fichier au début du fichier
  5.   while (!feof ())
  6.   {
  7.     // avec le &, ça ira mieux !
  8.     fscanf (f,"%s",&Tab[i].Nom);
  9.     //vide le buffer d'entrée
  10.     fflush ();
  11.     // déplacement du pointeur de fichier, sinon, tu liras toujours la même chose
  12.     fseek (f, sizeof (Tab[i].Nom), SEEK_CUR);
  13.     i++;
  14.   }
  15.   fclose(f);


Message édité par El_gringo le 18-06-2002 à 16:19:05
Reply

Marsh Posté le 18-06-2002 à 16:31:40    

Inutile le fseek, c'est automatique avec le fscanf (qui est pas l'idéale d'ailleur mieux vaut fgets dans ce cas là)


---------------
Le Tyran
Reply

Marsh Posté le 18-06-2002 à 16:36:42    

letoII a écrit a écrit :

Inutile le fseek, c'est automatique avec le fscanf (qui est pas l'idéale d'ailleur mieux vaut fgets dans ce cas là)  




 
j'utilise tjs les fonction de l'API Win32 moi pr lire les fichiers.
le fscanf, il fait un fseek comme je l'ai fait ? (il déplace du nombre de bytes lues ?)

Reply

Marsh Posté le 18-06-2002 à 16:37:56    

Oui, toutes les fonctions de lecture du c font avancer la position sur le flux.


---------------
Le Tyran
Reply

Marsh Posté le 18-06-2002 à 21:31:49    

http://www.esiee.fr/~morellea/EXEM [...] opie1.html
 
lis, ça devrait t'aider (c'est mon prof qui nous a donné ça en 1ere année et ça m'avait suffit pour comprendre)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed