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
  &nbsp;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
&nbsp;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