Recherche dans un fichier en c

didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Voila je suis sur un projet en c, je dois faire un carnet d'adresse. J'enregistre chaque contact entre les mots DEBUT et FIN. J'aimerai comptabiliser le nombre de mots DEBUT comment faire??? Voila UNE PARTIE de mon code :
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 100         
main(void)
{
          FILE *fichier = NULL; // initialisation du pointeur
          int choix=0,i=0,a=0;
          char nom[20];
          struct carnet
          {
                 char motdepasse[10];
                 char motdepasse2[10];
                 char nom[20];
                 char prenom[20];
                 char numtel[11];
                 char mel[30];
          }tabcarnet[N];
          puts("Bienvenue dans votre carnet d'adresse\n");
          printf("Veuillez appuyer sur une touche pour continuer");
          getch();
          system("cls");
          //do while
          puts("Que voulez vous faire?\n\n\t1 : Creer une fiche contact\n\t2 : Consulter une fiche\n\t3 : Ajouter et mettre a jour une fiche\n\t4 : Modifier une fiche\n\t5 : Supprimer une fiche\n\t6 : Supprimer votre carnet d'adresse\n\t7 : Afficher le nombre de vos contacts\n\t8 : Crypter un fichier\n\t9 : Decrypter un fichier");
          scanf("%d",& choix);
          system("cls");
          switch(choix)
          {
                       case 1 : 
                            {
                             fichier=fopen("c:\\carnet.txt","a+");
                             if (fichier != NULL)
                             {
                                         puts("Creation fiche :\n Veuillez entrer les differentes informations concernant votre contact : \nNom : ");
                                         fflush(stdin);//vide la memoire tampon
                                         fprintf(fichier,"DEBUT\n");
                                         gets(tabcarnet[i].nom);
                                         fprintf(fichier,tabcarnet[i].nom);
                                         fprintf(fichier,"\n");
                                         puts("Prenom : ");
                                         gets(tabcarnet[i].prenom);
                                         fprintf(fichier,tabcarnet[i].prenom);
                                         fprintf(fichier,"\n");
                                         do{
                                         puts("Numero de telephone : ");
                                         gets(tabcarnet[i].numtel);
                                         }while(strlen(tabcarnet[i].numtel)!=10 && tabcarnet[i].numtel);
                                         fprintf(fichier,tabcarnet[i].numtel);
                                         fprintf(fichier,"\n");
                                         //do{
                                         puts("Adresse e mail : ");
                                         gets(tabcarnet[i].mel);
                                         //}while(tabcarnet[i].)
                                         fprintf(fichier,tabcarnet[i].mel);
                                         fprintf(fichier,"\n");
                                         printf("Les coordonnees de %s %s ont ete enregistrees.", tabcarnet[i].prenom,tabcarnet[i].nom);
                                         fprintf(fichier,"FIN\n");
                                         i++;
                             }
                             fclose(fichier);   
                            }
                       break;
                       case 2 : 
                            {
                                fichier=fopen("c:\\carnet.txt","r");//tester la presence des fichiers
                                if (fichier != NULL)
                                {
                                           while(!feof(fichier))
                                            {
                                                                
                                      Je veux compter le nombre de mot DEBUT ici
                                            }
                                            for(i=0;i<a;i++)
                                           
A voir également:

7 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
oups, j'ai mal compris ta question ;-(
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
En fait je voudrai savoir combien de fois j'ai le mot DEBUT dans un fichier.
0
amigo
 
Bonjour,

Voici un petit programme qui montre comment compter les mots DEBUT dans ton carnet d'adresses

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define long_buf 255 // taille de la mémoire tampon
main(void)
{
char *chaine;
int compteur,lng;

FILE *fichier = NULL; // initialisation du pointeur
fichier=fopen("c:\\carnet.txt","r");//tester la presence des fichiers
if (fichier != NULL)
{
compteur=0;//compteur à 0
while(!feof(fichier))
{
fgets(chaine, long_buf, fichier); //lire une chaine de caractère longueur maxi lon_buf
lng=strlen(chaine); //longueur de la chaine
chaine[lng-1]='\0'; //remplacer le caractère fin de ligne par NULL
if (strcmp(chaine,"DEBUT")==0) compteur++; // comparer la chaine
}
fclose(fichier);
printf("\nLe mot DEBUT a été compté %d fois\n", compteur);
}
getch();

}
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je n'ai pas compris le truc de la mémoire tampon , je ne vois pas pourquoi il faut l'utiliser et à quoi correspond le 255?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

voici un autre exemple
lami20j@debserv:~/trash$ cat compter_mot_debut.c
#include<stdio.h>
#include<string.h>

int main ()
{
  FILE *fic;

  if (NULL == (fic = (fopen ("fichier.txt", "r"))))
    return -1;
  printf ("%d fois\n", compter_mots (fic));
  return 0;
}


int compter_mots (FILE * fic)
{
  char mot[30];
  int etat, cm, c, i;

  cm = etat = i = 0;

  while (!feof (fic)) {
    c = fgetc (fic);
    if (c == ' ' || c == '\t' || c == '\n') {
      mot[i] = '\0';
      if (strcmp (mot, "DEBUT") == 0)
        ++cm;
      etat = 0;
      mot[0] = '\0';
      i = 0;
    }else if (etat == 0) {
      etat = 1;
      mot[i++] = c;
    }else
      mot[i++] = c;
  }
  return cm;
}
tester sur
De début je vous dit que je vais compter seulement les mots DEBUT
C'est un bon DEBUT pour aprendre comment il faut DEBUTER
Avec une fonction qui compte les occurences de mot DEBUT
Résultat
lami20j@debserv:~/trash$ gcc -o compter_mot_debut.exe compter_mot_debut.c
lami20j@debserv:~/trash$ ./compter_mot_debut.exe
3 fois
0
amigo
 
La mémoire tampon c'est l'espace mémoire utilisé par le prog pour la lecture des fichiers bufférisé comme les fichiers texte.
Le nombre 225 c'est la longueur maxi que tu veux donner à la mémoire tampon (buffer).
J'ai mis 255 arbitrairement parce que je pense q'une ligne de texte ne dépassera pas cette taille. mais tu peux augmenter si c'est insuffisant ou au contraire diminuer. Ce qu'il faut c'est que tes chaines soit absolument contenues dans ce buffer.
Est assez clair?
0

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

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Et plus simple
#include<stdio.h>
#include<string.h>

int main ()
{
  FILE *fic;

  if (NULL == (fic = (fopen ("fichier.txt", "r"))))
    return -1;
  printf ("%d fois\n", compter_mots (fic));
  return 0;
}


int compter_mots (FILE * fic)
{
  char mot[30];
  int cm = 0;

  while (!feof (fic)) {
    fscanf (fic, "%s", mot);
    if (strcmp (mot, "DEBUT") == 0)
      cm++;
  }
  return cm;
}
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je teste tout ça demain et je vous en informe... Merci en tout cas!!!
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Ca marche impec , j'ai essayé la dernière méthode merci beaucoup!!!
J'ai toujours un autre problème qui concerne les structures cette fois-ci, dans mon code j'ai déclaré une structure que j'utilise pour sauvegarder les coordonnées. Par contre, est-il possible d'utiliser ces structures dans le fichier? En fait, j'ai besoin de récupérer seulement les noms des contacts enregistrés comment faire? J'ai essayé avec un fscanf mais ca ne marche pas!
0