Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1578 connectés 

  FORUM HardWare.fr
  Programmation
  C

  lecture de fichier avec sscanf

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lecture de fichier avec sscanf

n°1314498
sandra771
Posté le 27-02-2006 à 16:13:48  profilanswer
 

Bonjour,
 
Je voudrais lire les données d'un fichier comportant plusieurs lignes.
Par exemple, la première ligne comporte les données ASCII suivantes:  
FREQUENCY POWER (etc...)
mon code est le suivant:
 
/* je parcours le fichier avec l instruction suivante:*/
while(fgets(ligne,LONG,File) != NULL) {    
/* je veux lire par exemple les deux premiers mots FREQUENCY et POWER de la premiere ligne de mon fichier. Pour cela, je fais: */
sscanf(ligne,"%9s %5s", &Freq, &Puiss);
printf("Freq vaut: %s     et Puiss vaut: %s\n",&Freq,&Puiss);
/* Freq est initialisé à: char *Freq='fffffffff'; par exemple et Puiss à: char *Puiss='ppppp'; */
 
Le résultat de mon printf apres execution me donne:      Freq vaut: FREQPOWER et Puiss vaut: POWER!!
Je n'obtiens pas de que je veux et ne trouve pas d'où pourrait provenir mon erreur...
 
Auriez-vous une idée?
Merci d'avance!
 
Sandra

mood
Publicité
Posté le 27-02-2006 à 16:13:48  profilanswer
 

n°1314524
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-02-2006 à 16:25:47  profilanswer
 

sandra771 a écrit :

Je voudrais lire les données d'un fichier comportant plusieurs lignes.


Ce code est très incomplet (mais ces '&' sont très suspects !). Merci de poster un code complet et compilable réduit au minimum montrant le problème, avec un exemple de fichier de données.
 
On ne sait pas ce que tu ne sais pas.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1314577
sandra771
Posté le 27-02-2006 à 16:57:34  profilanswer
 

En fait, le programme est assez conséquent!  
J'ai essayé de garder l'essentiel, j'espère que ça suffira!
 
# include <stdio.h>
# define LONG 30
void main() {
 
static FILE *File = NULL;
/* soit un fichier comportant une seule ligne de code ASCII pour simplifier, soit la ligne suivante:
FREQUENCY POWER */
 
typedef struct {
UCHAR Freq;
UCHAR Puiss;
} MaStruct;
 
char ligne[LONG];
 
/* apres ouverture du fichier: */
 
while(fgets(ligne,LONG,File) != NULL) {  
 
sscanf(ligne,"%9s %5s", &MaStruct.Freq, &MaStruct.Puiss);
printf("Freq vaut: %s et Puiss vaut: %s\n", &MaStruct.Freq, &MaStruct.Puiss);
 
}
}
 
Sandra

n°1314609
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-02-2006 à 17:28:06  profilanswer
 

sandra771 a écrit :

J'ai essayé de garder l'essentiel, j'espère que ça suffira!


Tu as compilé ? Parce qu'il manque encore la moitié du code là. Et le fichier, il est ouvert comment ?
Ceci devrait fonctionner (pas pu le tester, le fichier ne s'ouvre pas pour une raison que j'ignore)

Code :
  1. # include <stdio.h>
  2. # define LONG 30
  3. #define fname "data.txt"
  4. /* -ed- http://mapage.noos.fr/emdel/notes.htm#typemain */
  5. int main(void)
  6. {
  7.    /* -ed-
  8.       static FILE *File = NULL;
  9.    pourquoi static ?
  10.    */
  11.    FILE *File = fopen ("r", fname);
  12.    if (File != NULL)
  13.    {
  14.       /* soit un fichier comportant une seule ligne de code ASCII pour
  15.       simplifier, soit la ligne suivante:
  16.       FREQUENCY POWER */
  17.       typedef struct
  18.       {
  19.          char Freq[LONG];
  20.          char Puiss[LONG];
  21.       }
  22.       MaStruct;
  23.       /* -ed- manquant */
  24.       MaStruct data;
  25.       char ligne[LONG];
  26.       /* apres ouverture du fichier: */
  27.       while (fgets(ligne, LONG, File) != NULL)
  28.       {
  29.          int n = sscanf(ligne, "%s %s", data.Freq, data.Puiss);
  30.          if (n == 2)
  31.          {
  32.          printf("Freq vaut: %s et Puiss vaut: %s\n", data.Freq, data.Puiss);
  33.          }
  34.          else
  35.          {
  36.             printf ("input error : '%s'", ligne);
  37.          }
  38.       }
  39.       fclose (File);
  40.    }
  41.    else
  42.    {
  43.       perror (fname);
  44.    }
  45.    return 0;
  46. }


Message édité par Emmanuel Delahaye le 27-02-2006 à 17:38:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1315037
sandra771
Posté le 28-02-2006 à 09:36:07  profilanswer
 

Ca y est, ça marche!
Merci beaucoup. Tu m'as vraiment débloqué. En fait, ce sont bien les & qui étaient en trop... ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  lecture de fichier avec sscanf

 

Sujets relatifs
enegistrement fichiertéléchargement fichier audio avec paypal
Fichier CONFXML XSL et fichier volumineux : 100 Mo
[resolu]comment ecrire dans un fichier,Importer fichier sql contenant plusieurs bases
Lecture d'un fichier binaire (fichier C3D)Gérer un blob comme un fichier
[VBScript] tester un CRC d'un fichier VBS éxécuté 
Plus de sujets relatifs à : lecture de fichier avec sscanf


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR