Lire un fichier en C mot par mot

Résolu/Fermé
stephanier_29 - 4 nov. 2008 à 14:11
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 5 nov. 2008 à 20:00
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 samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
4 nov. 2008 à 19:57
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
5 nov. 2008 à 10:00
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 nov. 2008 à 10:19
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 samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
5 nov. 2008 à 20:00
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