Recuperer un seul mot dans un fichier C
Résolu
kushyyy
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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;
}
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;
}
A voir également:
- Recuperer un seul mot dans un fichier C
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Fichier rar - Guide
3 réponses
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
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
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.
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;
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?
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?
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
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