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 -
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 :
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:
- Recherche dans un fichier en c
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
7 réponses
oups, j'ai mal compris ta question ;-(
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.
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();
}
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();
}
Re,
voici un autre exemple
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 DEBUTRésultat
lami20j@debserv:~/trash$ gcc -o compter_mot_debut.exe compter_mot_debut.c lami20j@debserv:~/trash$ ./compter_mot_debut.exe 3 fois
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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; }
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!
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!