Lire un fichier de données bizarre [C/C++] - Programmation
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.
Marsh Posté le 21-03-2002 à 14:13:32
bin regarde si les positions sont toujours les mêmes et base-toi dessus....
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
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...
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]
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!!