Recuperer un seul mot dans un fichier C

Résolu/Fermé
kushyyy - 24 avril 2009 à 11:41
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 avril 2009 à 19:22
Bonjour,

j'aimerai savoir comment faire pour que mon petit programme C récupère seulement le premier ou n'importe lequel mot d'un fichier. j'ai essayé de récupèrer seulement le premier, mais ca ne fonctionne pas comme prevu, je suis un peu perdu, pouvez vous m'aider??
Voila mon code:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
char premMot[7];
int caractereActuel;

FILE* fichier = NULL;
fichier = fopen("requete", "r+"); //on ouvre le fichier que l'on a recu

if (fichier != NULL) //on teste si l'ouverture se passe bien
{

int i=1;
for(i=0;i<=6;i++) //le premier mot de mon fichier fait forcement - de 6 caracteres
{
caractereActuel = fgetc(fichier); //on recupere le caractere
if(caractereActuel!='32') //si le caractere est different de espace
{
premMot[i]=caractereActuel; //on le le met dans la chaine de carac premMot
printf("%c",premMot[i]);
}
}

fclose(fichier);
}

else{printf("Impossible d'ouvrir le fichier test.txt");} // On affiche un message d'erreur si l'ouverture ne se passe pas bien

system("PAUSE");
return 0;
}

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 avril 2009 à 11:51
Salut,
if(caractereActuel!='32')
Ce n'est pas la bonne syntaxe. Soit tu mets 32 (sans apostrophes) ou alors tu mets ' ' (espace entre apostrophes).
De plus, tu te compliques la vie.
Pour récupérer le premier mot :
if(scanf("%6s",premierMot)==1) { //lecture correcte
0
merci pour ta reponse, mais le soucis, c'est que je ne sais pas combien de caracteres fait le premier mot, je veux le prendre pour le mettre dans une chaine de caracteres qui fait exactement ce nombre de caracteres.
0
2 solutions, une bonne et une mauvaise:
- tu lis le mot et à chaque caractère, tu réalloues ta chaîne... mauvais en temps d'éxécution,
- tu lis le mot en comptant le nbre de caractères, tu alloues ta chaîne, et tu fait ton 'scanf'.
Simple, isn't ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 avril 2009 à 12:27
Voici un code qui réalise ce que tu veux suivant l'approche 2 de loupius mais je n'ai pas testé.
char *premierMot;
size_t compt=0;
int car;
while((car=fgetc(fichier))!=' ' && car!='\n') compt++;
premierMot=malloc(compt+1);
if(premierMot !=NULL) {
   rewind(fichier);
   if(scanf("%s",premierMot) == 1) {
           //ici tu as premierMot qui contient le premier Mot avec juste la taille nécessaire et suffisante.
   }
}

//bla bla


//on désalloue
free(premierMot),premierMot=NULL;
0
merci pour ta reponse,
mais le soucis, c'est que ca me donner le premier mot de ce que je tape dans la console, pas de ce qu'il y'a dans mon fichier, je lire le fichier en entier et le mettre dans ma chaine de caractere?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 avril 2009 à 14:19
Normal, je n'ai pas testé, et j'ai fait une boulette ^^.
Remplace le scanf("%s",premierMot), par :fscanf(fichier,"%s",premierMot)
Cela devrait mieux marcher.
0
kushyyy > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
24 avril 2009 à 14:21
merci beaucoup, tu me sauve la vie :D
0
kushyyy > kushyyy
24 avril 2009 à 14:34
euh, derniere petite question, si je veux recuperer le deuxieme mot, je peux reutiliser le meme code a la suite et simplement incrementer la position du curseur du fichier ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > kushyyy
24 avril 2009 à 19:22
Ca sera plus compliqué dans ce cas. Le rewind() permet de retourner au début.
Il faudrait fgetpos et fsetpos pour pouvoir respectivement mémoriser le pointeur après lecture du premier mot et le remettre en place après dénombrement du nombre de lettres du second.

Une alternative intéressante serait l'utilisation conjointe de fgets et de strtok.

Cdlt
0