Calcule le nombre d'occurrences d'une lettre passée en paramètre dans un fichier, recherche sensible à la casse
#include "t_bool.h"
#include "file_tools.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* Nom du fichier temporaire. */
#define TEMP_FILE "example.txt"
/* Liste, non exhaustive, de delimiteurs */
#define DELIM " *§:/;!.,?&~<>{([|])}\"\\+="
/* -------------------------------------------------------
file_tools_nbr_letter
-------------------------------------------------------
Trouve le nombre d'occurences d'une lettre
dans un fichier (acces direct).
Recherche sensible a la casse.
-------------------------------------------------------
arg : Fichier a lire.
arg : Lettre a retrouver.
return: Nombre d'occurences de la lettre, -1 en cas
d'erreur.
------------------------------------------------------- */
int file_tools_nbr_letter (char const * const s_filename,
char const c_letter)
{
FILE * p_file = NULL;
char * s_line = NULL;
int ret = -1;
int cpt = 0;
/* ----- Verification des arguments ----- */
if (!s_filename) {
/* Erreur: arguments incorrects. */
return -1;
}
/* ----- */
/* ----- Ouverture du fichier a lire ----- */
p_file = fopen (s_filename, "r");
if (!p_file) {
/* Erreur: impossible d'ouvrir le fichier. */
return -1;
}
/* ----- Allocation du buffer temporaire ----- */
s_line = malloc (BUFSIZ);
if (!s_line) {
/* Erreur: impossible d'allouer l'espace requis. */
fclose (p_file);
return -1;
}
/* ----- Parcours du fichier ----- */
while (fgets (s_line, BUFSIZ, p_file)) {
/* Parcours de la ligne recuperee. */
size_t i = 0;
for (i = 0; i < strlen (s_line); i++) {
/* Recherche des occurences de la lettre. */
if (s_line[i] == c_letter) {
cpt++;
}
}
/* On efface le buffer. */
memset (s_line, 0, sizeof (s_line));
}
/* On transmet la valeur du compteur
a la variable de retour. */
ret = cpt;
/* Fermeture du fichier. */
fclose (p_file);
/* Liberation du buffer temporaire. */
free (s_line);
s_line = NULL;
return ret;
}
Vous pouvez retrouver cette fonction ainsi que toutes les autres fonctions de la catégorie Fichier dans l'archive file_tools.zip.
L'archive comprends les fichiers suivants :
- example1.txt et example2.txt deux fichiers utilisés par la méthode main.
- t_bool.h : déclaration du type booléen.
- file_tools.h et file_tools.c : déclaration et implémentation des fonctions de la catégorie Fichier.
- main.c : fonction permettant et mettant en œuvre l'ensemble des fonctions Fichier.
Exécution
$gcc main.c file_tools.c -o filetools $chmod +x filetools $./filetools
file_tools.zip