Comment lire un fichier CSV en langage C
De nombreux logiciels exportent des données au format CSV (valeurs séparées par des virgules). Ce format lisible et facile à manipuler est pratique pour transférer des données entre programmes. Les programmes C traitant des données auront souvent à lire des fichiers CSV.
Étape 1
Consultez la documentation du programme générant le CSV. Déterminez le nombre de champs par ligne et le format de chacun. Exemple : 1, "test", 34.5 → 3 champs : entier, chaîne, flottant.
Étape 2
Créez une structure avec un membre par champ. Exemple :
struct data {
int col1;
char *col2;
float col3;
};
Étape 3
Créez une fonction pour lire le CSV, accessible au reste du programme, travaillant sur structures communes. Passage par référence pour éviter valeur de retour. Prototype : void ParseCSV(char *filename, data& input);
Étape 4
Incluez l'en-tête E/S standard : #include <stdio.h> (en haut du fichier source).
Étape 5
Incluez la bibliothèque de chaînes : #include <string.h>.
Étape 6
Créez un objet fichier : FILE * pInput;
Étape 7
Créez un tampon pour une ligne : #define BUFFER_SIZE 1024 puis char buf[BUFFER_SIZE];
Étape 8
Ouvrez le fichier : pInput = fopen("filename", "r");
Étape 9
Lisez une ligne : fgets(buf, sizeof(buf), pInput);
Étape 10
Analysez le CSV avec strtok. Nouveau pointeur char pour les jetons : char *tok = strtok(buf, ",");
Étape 11
Convertissez le jeton en type approprié. Exemple : row.col1 = atoi(tok);
Étape 12
Pour les jetons suivants, passez NULL à strtok : tok = strtok(NULL, ",");. Convertissez chaque champ. Exemple complet pour une ligne :
char *tok = strtok(buf, ",");
row.col1 = atoi(tok);
tok = strtok(NULL, ",");
row.col2 = tok;
tok = strtok(NULL, ",");
row.col3 = atof(tok);
Étape 13
Répétez pour tous les champs de la ligne. strtok retourne NULL quand la ligne est finie.
fgets retourne NULL en fin de fichier → utilisez une boucle while pour parcourir tout le fichier.fopen peut retourner NULL en cas d'erreur — vérifiez avant utilisation. Les jetons peuvent ne pas avoir le format attendu. Vérifiez les données avant conversion (chaîne vide, NULL, etc.).