[C/C++] Lire un fichier de données bizarre

Lire un fichier de données bizarre [C/C++] - Programmation

Marsh Posté le 21-03-2002 à 14:06:08    

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!!

Reply

Marsh Posté le 21-03-2002 à 14:06:08   

Reply

Marsh Posté le 21-03-2002 à 14:08:23    

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.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 21-03-2002 à 14:13:32    

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

Reply

Marsh Posté le 21-03-2002 à 14:15:32    

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


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 21-03-2002 à 14:19:30    

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...

Reply

Marsh Posté le 21-03-2002 à 17:07:46    

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]


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Sujets relatifs:

Leave a Replay

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