Lire un fichier en C mot par mot

Résolu
stephanier_29 -  
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Actuellement, je travaille sur un projet personnel afin de délimiter des traits de côte, et j'ai trouvé sur un site les coordonnées de divers points, mais qui sont stockés dans un fichier texte.

Le fichier texte est à peu près de cette allure :

# -b
-2.401399	46.724901
-2.400812	46.724607
-2.399932	46.724607
-2.398759	46.723434
-2.398759	46.720794
-2.397879	46.719914
-2.397879	46.718447


# -b correspond à un "changement de côte", par exemple, quand on arrive sur une île.

Ce que je voudrais c'est pour chaque île pouvoir récupérer la première coordonnées du point, et la deuxième, et les stocker dans ma structure :

typedef Struct _Point{

	double longitude;
	double latitude;

}Point;


Sachant que je dois faire cela pour tous les points et toutes les îles tant que mon fichier n'est pas fini.

J'avoue qu'en JAVA, j'aurais codé ça sans problème, mais là en C, je rame un peu, donc j'en viens à votre bon coeur.

Merci d'avance,
Stéphanie
A voir également:

2 réponses

bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
Je te conseille d'utiliser la fonction sscanf(). Elle fonctionne comme scanf() sauf qu'elle prend en entrée une chaîne de caractère en premier paramètre [qui est supplémentaire par rapport à scanf()].

Par exemple ce bout de code :
#include <stdio.h>

int main()
{
    char *str = "-2.398759     	46.723434";
    float a, b;

    sscanf(str, "%f%f", &a, &b);
    
    printf("a : %f\nb : %f", a, b);
}

Affiche :
a : -2.398759
b : 46.723434

(J'ai mis des float dans mon exemple car le format double n'est pas justifié pour des nombres d'une précision si petite)

Remarque : pour le sscanf() tout comme pour le scanf() les espaces sont considérés comme des séparateurs donc leur nombre n'importe pas tant qu'il y en a au moins un.
0
stephanier_29
 
merci beaucoup de ton aide ^^

j'ai réussi à faire ce que je voulais faire, mais j'avoue que je n'aurais pas pensé à sscanf()
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

j'ai réussi à faire ce que je voulais faire, mais j'avoue que je n'aurais pas pensé à sscanf()

Le sscanf() n'est pas forcement nécessaire.
Il l'a utiliser puisqu'il fait la lecture depuis une variable qu'il a initialisée.

Quand tu lis le fichiers, il suffit d'utiliser la fonction fscanf
int fscanf (FILE *stream, const char *format, ...);
Le stream sera le pointeur de type FILE vers ton fichier.


0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
C'est vrai que je n'ai pas eu l'idée de traiter dès la lecture. (Je n'ai pas l'habitude de lire un fichier pour une simple lecture de paramètres ^^)
0