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