/* 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; }