Code source du fichier src/trtchamps.c

/*
    Fichier trtchamps.c
    Auteur Bernard Chardonneau

    Logiciel libre diffusé dans le domaine public.


    Bibliothèque de fonctions permettant d'extraire ou de sauter
    des champs dans une ligne d'un fichier csv.
*/

#include <stdio.h>
#include "trtchamps.h"


// récupérer le début d'un champ (tronqué à lgmax_champ caractères)

void recupchamp (FILE *descfic, char *champ)
{
    int car;  // caractère lu
    int i;    // position dans le tableau champ


    // initialisation
    i = 0;

    // lire le premier caractère du champ
    car = getc (descfic);

    // tant que ni fin de champ, ni fin de ligne, ni fin de fichier
    while (car != ';' && car != '\n' && car != EOF)
    {
        // s'il y a de la place dans champ pour rajouter ce caractère
        if (i < lgmax_champ)
            // le faire
            champ [i++] = car;

        // lire le caractère suivant
        car = getc (descfic);
    }

    // terminer la chaine de caratères champ
    champ [i] = '\0';
}



// récupérer le taux de vaccination dans un champ
// qui contient aussi le nombre de doses

void recuptaux (FILE *descfic, char *taux)
{
    int car;  // caractère lu

    // sauter le début du champ jusqu'au tiret
    do
        car = getc (descfic);
    while (car != '-' && car != '\n' && car != EOF);

    // récupérer la suite du champ
    recupchamp (descfic, taux);
}



// sauter un champ dans la ligne sans le récupérer

void sautechamp (FILE *descfic)
{
    int car;  // caractère lu

    // répéter
    do
        // lire le caractère suivant
        car = getc (descfic);
    // jusque fin de champ, de ligne ou de fichier
    while (car != ';' && car != '\n' && car != EOF);
}



// sauter le reste de la ligne sans rien récupérer

void finligne (FILE *descfic)
{
    int car;  // caractère lu

    // répéter
    do
        // lire le caractère suivant
        car = getc (descfic);
    // jusque fin ligne ou de fichier
    while (car != '\n' && car != EOF);
}



// compter le nombre de champs dans la ligne

int comptechamps (FILE *descfic)
{
    int car;      // caractère lu
    int nbchamps; // nombre de champs

    // initialisation
    nbchamps = 1;

    // répéter
    do
    {
        // lire le caractère suivant
        car = getc (descfic);

        // si c'est un ;
        if (car == ';')
            // un champ de plus
            nbchamps ++;
    }
    // jusque fin ligne ou de fichier
    while (car != '\n' && car != EOF);

    // retourner le nombre de champs trouvés
    return nbchamps;
}