Recherche dans un fichier en c

didy_gwatinik Messages postés 358 Statut Membre -  
didy_gwatinik Messages postés 358 Statut Membre -
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++)
                                           
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    oups, j'ai mal compris ta question ;-(
    0
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      En fait je voudrai savoir combien de fois j'ai le mot DEBUT dans un fichier.
      0
  2. 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
    1. didy_gwatinik Messages postés 358 Statut Membre 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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  7. didy_gwatinik Messages postés 358 Statut Membre 80
     
    Je teste tout ça demain et je vous en informe... Merci en tout cas!!!
    0
  8. didy_gwatinik Messages postés 358 Statut Membre 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