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

 


Dernière réponse
Sujet : [C/C++] Lire un fichier de données bizarre
zi_ril_wanou Fais plutôt un lecture bufferisé (char buffer[BUFSIZ]; et fgets(buffer,BUFSIZ,stream)) puis scan le buffer pas à pas avec sscanf en parsant les champs (avec une fonction du style : char *SkipToNextSpace(char *buffer)) qui te retournera le pointeur de caractère sur le prochain champ à lire (NULL s'il n'y en a plus).
C'est bête et méchant, mais c'est propre et éprouvé.
En C, évite les fscanf au maximum. Dés que tu as le moindre "pète" dans un fichier, il est alors très difficile de rendre ton code plus robuste.  
Si tu as le moindre pépin avec l'explication ci dessus, n'hésite pas et je te filerai des exemples.

 

[jfdsdjhfuetppo]--Message édité par zi_ril_wanou--[/jfdsdjhfuetppo]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
zi_ril_wanou Fais plutôt un lecture bufferisé (char buffer[BUFSIZ]; et fgets(buffer,BUFSIZ,stream)) puis scan le buffer pas à pas avec sscanf en parsant les champs (avec une fonction du style : char *SkipToNextSpace(char *buffer)) qui te retournera le pointeur de caractère sur le prochain champ à lire (NULL s'il n'y en a plus).
C'est bête et méchant, mais c'est propre et éprouvé.
En C, évite les fscanf au maximum. Dés que tu as le moindre "pète" dans un fichier, il est alors très difficile de rendre ton code plus robuste.  
Si tu as le moindre pépin avec l'explication ci dessus, n'hésite pas et je te filerai des exemples.

 

[jfdsdjhfuetppo]--Message édité par zi_ril_wanou--[/jfdsdjhfuetppo]

nasdak

Citation :

Soit tu réécris tout ça à la mimine, et sans ces horribles allocations de chaînes statiques.


 
 
c'est a dire? je suis une burne...

leirn

bjone a écrit a écrit :

bin regarde si les positions sont toujours les mêmes et base-toi dessus....  




 
on ta dis ke ct des colonnes séprarées par des tabs

bjone bin regarde si les positions sont toujours les mêmes et base-toi dessus....
Jar Jar Soit tu remplaces les espaces dans ton fscanf par des tabulations (\t).
Soit tu réécris tout ça à la mimine, et sans ces horribles allocations de chaînes statiques.
nasdak jessaie de lire un fichier de données qui est comme ca:
 
01/03/2002 15:29:00 8962 267 TPB00E05   XXXXX J 001014704 0
01/03/2002 15:29:55 8963 413 PLOT I01 XX        0
 
 
il y a dix infos par ligne, séparés par des tabulations
le problème c'est que quand il n'y a rien dans un champ (par ex  apreTPB00E05 ya un champ vide) ce con de programme passe au champ suivant et ca décale tout
j'ai fait ca:
 
 
   char date[100];
   char heure[100];
   char numero_evt[100];
   char code_evt[100];
   char num_circuit[100];
   char code_oper[100];
   char nom[100];
   char prenom[100];
   char ref_usager[100];
   char codes[100];
     
   
   while ((fscanf( fic, "%s %s %s %s %s %s %s %s %s %s", date, heure, numero_evt, code_evt, num_circuit, code_oper, nom, prenom, ref_usager, codes ))!= EOF) {
     //printf( "%s ", list );  
     
    printf("date %s\n",&date);
    printf("heure %s",&heure);
    printf("numero_evt %s",&numero_evt);
    printf("code_evt %s",&code_evt);
    printf("num_circuit %s",&num_circuit);
    printf("code_oper %s",&code_oper);
    printf("nom %s",&nom);
    printf("prenom %s",&prenom);
    printf("badge %s",&ref_usager);
    printf("code %s",&codes);
    printf("ligne suivante\n" );
     
   }
 
ca marhce mais quand un champ est vide c'est décalé.. aidez moi!!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)