Lire avec fscanf dans un fichier avec délimiteurs
Bonsoir,
Actuellement sur un projet, j'ai besoin de lire dans un fichier .txt une ligne écrite sous cette forme (en théorie plusieurs, mais si sa fonctionne pour une, ca fonctionnera pour plusieurs):
Code:
Bolivar:48.880502:2.374922
Je dois stocker la chaine Bolivar dans une variable char, 48.xxxx dans une variable float, 2.xxxx dans une autre variable float.
Je me suis donc servi du scanf de cette façon pour lire les 3 données dont j'ai besoin:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
void main()
{
char nomStation[50];
float latitude[20], longitude[20];
FILE *fichier = NULL;
fichier = fopen ("stations_metro.txt", "r");
if(fichier != NULL)
{
fscanf(fichier,"%[:]:%f:%f\n", nomStation, latitude, longitude);
printf("Nom: %s\n", nomStation);
printf("Lat: %f\n", *latitude);
printf("Longi: %f\n\n", *longitude);
}
fclose(fichier);
} |
Le résultat n'est pas celui que je souhaite, il ne récupère pas le nom (il affiche en tout cas un symbole bizarre), la latitude vaut -0.00000 et la longitude varie, si je lance plusieurs fois le code, la valeur sera différente (des valeurs aléatoires j'ai l'impression)
Code:
1 2 3
| Nom:
Lat: 0.000000
Longi: -0.000000 |
Code:
1 2 3
| Nom:
Lat: 0.000000
Longi: -31270482477056.000000 |
Je souhaite en plus de cela récupère les séparateurs (: après le nom, : après latitude et \n après longitude) c'est pour cela que je l'ai ai ajouté dans le fscanf.
Pour information, j'utilise Ubuntu 14.04 pour faire mon code avec l'editeur gedit et le terminal (sans dec' ^^)
J'ai beaucoup cherché sur internet, j'ai trouvé pas mal de choses, j'ai tout essayé et j'ai erreur plus ou moins farfelue et même des Erreur de segmentation (ça c'est moins bien par contre ...)
Pouvez vous m'aider sur la syntaxe de la fonction fscanf pour que cela fonctionne correctement ?
PS: J'ai essayé une méthode autre aussi, à savoir récupèrer toute la ligne avec fgets et la découper apr-s avec strtok (en l'utilisant 3 fois pour avoir les 3 valeurs), cela fonctionne pour quelques lignes et dès que je complique un peu le code (avec des malloc et tout), j'ai des erreurs de segmentation à n'en plus finir.
PS2: J'aimerais trouver une méthode simple. Sur une autre forum, on m'a suggérer de stocker tout le fichier dans un tableau a deux dimensions et de l'allouer dynamiquement, mais pour quelque chose qui est juste de récupèrer 3 valeurs, je trouve la méthode compliquée et peu fiable.
En espérant des réponses rapides,
Cordialement,
Share45.