Enregistrer un txt dans un tableau

Résolu/Fermé
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 - 21 févr. 2008 à 10:21
 Utilisateur anonyme - 21 févr. 2008 à 20:50
Bonjour,

J'ai un document .txt composé d'un nom d'une ville, sa latitude puis sa longitude (cela fait donc 3 colonnes séparées chacune par une tabulation).
J'ai en tout de nombreuses villes et à chaque nouvelle ville, il y a un saut de ligne.
Je programme en langage C avec dev C++.
J'aimerai que l'utilisateur rentre le nom d'une ville, que le programme cherche dans le fichier puis qu'il affiche le nom de la ville, sa latitude puis sa longitude.
Je suis bloqué dessus depuis longtemps donc j'espère que vous pourrez m'apporter un peu d'aide !
Merci d'avance
A voir également:

10 réponses

scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
21 févr. 2008 à 17:40
okok
Une derniere question : ne serait-il pas plus simple de tout mettre dans un fichier excel ?
Il y aurai alors juste à changer la ligne split = strtok(NULL, "\t"); en remplacant \t par ...heu..
Trop compliqué à ton avis ?
1
Utilisateur anonyme
21 févr. 2008 à 11:57
Bonjour,

Je regarde ça ;-)
0
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
21 févr. 2008 à 12:20
ok !
0
Utilisateur anonyme
21 févr. 2008 à 14:17
Voici la solution :

#include <stdio.h>
#define TAILLE 32

int main(int argc, char *argv[])
{
FILE * entree;
char ligne[TAILLE];
int cpt = 0;
char *split;
char *nomVille = NULL;
char cChaine[TAILLE];
char cChaineFile[TAILLE];

printf("Donnez le nom du fichier à analyser : ");
fgets(cChaineFile, sizeof cChaineFile, stdin);

/*La chaine contient le retour chariot, il faut donc le supprimer*/
cChaineFile[strlen(cChaineFile)-1] = '\0';

entree = fopen(cChaineFile, "r");

if(entree == NULL){
printf("Le fichier spécifié n'existe pas\n");
return -1;
}

printf("Donnez le nom de la ville à rechercher : ");
fgets(cChaine, sizeof cChaine, stdin);

cChaine[strlen(cChaine)-1] = '\0';

while (fgets(ligne,TAILLE,entree) != NULL){
nomVille = strtok (ligne, "\t");
if( strcasecmp(cChaine, nomVille) == 0){
cpt++;
printf("Ville : %s\t", nomVille);
split = strtok(NULL, "\t");
printf("Latitude : %s\t", split);
split = strtok(NULL, "\t");
printf("Longitude : %s", split);
break;
}
}
if(cpt==0)
printf("La ville %s n'a pas été trouvée\n", cChaine);

system("PAUSE");
return 0;
}

N'hésite pas à poser des questions si tu ne comprends pas qq chose ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
21 févr. 2008 à 16:05
Merci beaucoup. C'est sympa.
A quoi sert la ligne : split = strtok(NULL, "\t"); ?
Et strcasecmp ? C'est comme la fonction strcmp permettant de comparer deux chaines de caractères ?
Enfin, je ne connais pas encore les pointeurs et j'ai vu que tu en avait mis au début. Et donc j'aurai pas été capable d'utiliser split et nomVille.. :/
0
Utilisateur anonyme
21 févr. 2008 à 16:16
la fonction strtok permet de séparer une chaîne de caractères en lui précisant un délimiteur. Dans ton cas le délimiteur est \t qui est la tabulation. Nous mettons NULL comme premier paramètre car strtok a déjà en mémoire la chaîne "ligne" inutile donc de lui préciser une nouvelle fois.

La fonction strcasecmp est effectivement identique à la fonction strcmp à la différence près qu'elle ne tient pas compte de la casse. Si l'utilisateur passe une ville en minuscule et que les noms sont en majuscule dans ton fichier la comparaison se fera qd meme.

bonne continuation
0
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
21 févr. 2008 à 17:51
non laisse tomber.
Un dernier probleme cependant : si la ville comporte un espace ou un tiret, cela ne marche pas..
Comment faire ?
0
Utilisateur anonyme
21 févr. 2008 à 18:17
Bizarre car chez moi cela fonctionne bien : http://img253.imageshack.us/img253/6953/lecturefichierpz1.png
0
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
21 févr. 2008 à 20:42
Oui je suis dsl c'était pas les espaces mais les accents.
J'ai tout corrigé ça y est.
Merci !
0
Utilisateur anonyme
21 févr. 2008 à 20:50
N'oublie pas de passer ton post en résolu ;-)
0