Lecture d'une ligne spécifique dans un fichier, numéro de ligne passé en paramètre
#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_read_line --------------------------------------------------- Lit une ligne dans un fichier (en acces direct). Le caractere de saut de ligne (\n) est supprime de la chaine s'il est present. Remarque : Il faut liberer la chaine retournee avec free(); --------------------------------------------------- arg : Fichier a lire. arg : Ligne du fichier a lire. return: Ligne lue. NULL en cas d'erreur. ------------------------------------------------ */ char * file_tools_read_line (char const * const s_filename, unsigned int i_line_num) { FILE * p_file = NULL; char s_line [BUFSIZ]; unsigned int cpt = 1; /* ----- Ouverture du fichier ----- */ p_file = fopen (s_filename, "r"); if (!p_file) { /* Erreur: impossible d'ouvrir le fichier. */ return NULL; } /* ----- Lecture de la ligne du fichier ----- */ while (fgets (s_line, BUFSIZ, p_file)) { if (cpt == i_line_num) { /* Suppression du caractere de saut de ligne si necessaire. */ char * p = strchr (s_line, '\n'); if (p) { *p = 0; } break; } cpt++; } /* ----- Fermeture du fichier ----- */ fclose (p_file); return s_line; }
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