Sujet : fscanf, s'arreter en fin de fichier ?

Sujet : fscanf, s'arreter en fin de fichier ? - C - Programmation

Marsh Posté le 13-12-2005 à 09:40:22    

Si je met des chaines de characteres dans un fichier  
 
blabla-5-blabla-6  
blabla-4-blabla-3  
 
 
pour les recuperer j'utilise par exemple :  
fscanf(file,%6s-%d-%6s-%d,&var1,&var2,&var3,&var4)  
 
par contre ca me recupere que la premiere ligne, comment faire pour recuperer les autres ? et s'arreter quand il n'y en a plus ?  
 
Désolé pour mes questions qui doivent etre d'un niveau peu élevé mais je débute un peu de ce coté la et je ne trouve pas réponse a mes questions dans le bouquin que j'ai...
 
 
Merci  d'avance  :jap:

Reply

Marsh Posté le 13-12-2005 à 09:40:22   

Reply

Marsh Posté le 13-12-2005 à 10:47:00    

korxx a écrit :

pour les recuperer j'utilise par exemple :  
fscanf(file,%6s-%d-%6s-%d,&var1,&var2,&var3,&var4)  


 :heink:
Ben si "var1" et "var3" sont définies comme des chaînes, style "char var1[100]", faut pas mettre le "&" !!!

Message cité 1 fois
Message édité par Sve@r le 13-12-2005 à 10:50:59
Reply

Marsh Posté le 13-12-2005 à 10:53:47    

un truc dans ce goût là:
 

Code :
  1. char buffer[256];
  2. while( fgets(buffer,sizeof(buffer),file) )
  3. {
  4.    if( sscanf(buffer,"....",....) == nombre_d'extractions )
  5.          ......
  6. }

Message cité 1 fois
Message édité par bjone le 13-12-2005 à 10:57:34
Reply

Marsh Posté le 13-12-2005 à 17:51:23    

Sve@r a écrit :

:heink:
Ben si "var1" et "var3" sont définies comme des chaînes, style "char var1[100]", faut pas mettre le "&" !!!


 
oui ca je sais, c'est pas du tout l'objet de ma question... c'etait juste un exemple.

Reply

Marsh Posté le 13-12-2005 à 17:52:43    

bjone a écrit :

un truc dans ce goût là:
 

Code :
  1. char buffer[256];
  2. while( fgets(buffer,sizeof(buffer),file) )
  3. {
  4.    if( sscanf(buffer,"....",....) == nombre_d'extractions )
  5.          ......
  6. }



 
Merci, en fait je pense avoir trouvé, fscanf renvoi "EOF" quand il arrive en fin de fichier, je vais faire une boucle while avec cette condition, ca devrait marcher :)

Reply

Marsh Posté le 13-12-2005 à 18:06:04    

ouai très franchement d'un point de vue propreté, il vaux mieux lire ligne par ligne et parser ta ligne ensuite.
 
le fscanf y doit cumuler deux domaines d'erreurs: les erreurs de lecture, et les erreurs d'extraction de champ/valeur.
 
l'avantage c'est que avec un truc style ça:
 

Code :
  1. char buffer[256];
  2. int Step=0;
  3. while( fgets(buffer,sizeof(buffer),file) )
  4. {
  5.    switch( Step )
  6.    {
  7.         // 0: Header
  8.         case 0:
  9.                    if( sscanf(...  ) == ... )
  10.                    {
  11.                       // Header OK                         
  12.                       Step=1;
  13.                    }
  14.                    break;
  15.         // 1: collection de trucs type A
  16.         case 1:
  17.                    if( sscanf(.... ) == ... )
  18.                    {
  19.                        // Element Ok
  20.                        // ajout à une liste
  21.                    }
  22.                    break;
  23.    }
  24. }


 
tu peux plus facilement parser un petit fichier ASCII à la con.  
en changeant de mode pour switcher de type de données à récupérer.  (avec la possibilité de faire des allez-retours entre plusieurs type d'infos).
notamment j'avais ça pour les fichiers de scènes 3D de 3DStudio en .ASC tout con, mais bon c'était vieux et limité à la base.
 
le fscanf j'aime po, mais bon ça dépends ce que tu comptes faire par la suite et qu'est-ce que tu as à parser.


Message édité par bjone le 13-12-2005 à 18:08:26
Reply

Sujets relatifs:

Leave a Replay

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