Consultez la documentation du programme qui fournit le fichier CSV. Déterminez le nombre de champs dans chaque ligne, ainsi que le format de chaque champ. Par exemple, si un programme fournit un fichier CSV avec les données suivantes: 1, "test", 34.5 Vous noterez trois champs: un entier, une chaîne et un nombre à virgule flottante.
Créez une structure contenant un membre de données pour chaque champ identifié dans le fichier CSV. En utilisant l'exemple de ligne fourni de 1, "test", 34.5, vous auriez besoin de la structure suivante: struct data { int col1; caractère *col2; flotteur col3; };
Créez une méthode dans votre programme qui gérera la lecture du fichier CSV. Cela devra être accessible au reste de votre programme et devra probablement travailler sur des structures de données communes afin que d'autres méthodes puissent accéder aux données qui ont été lues. Passez le paramètre par référence pour supprimer le besoin d'une valeur de retour. Un exemple de prototype de fonction serait: void ParseCSV( char *filename, data& input );
Créez un objet fichier, qui lira les données, en utilisant le code suivant: FILE * pInput;
Créez un tampon de caractères suffisamment grand pour contenir une ligne du fichier à la fois. En raison des contraintes du langage, la façon la plus simple de le faire est de déclarer un tableau de caractères d'une taille suffisamment grande, comme avec: #define BUFFER_SIZE 1024
Ouvrez le fichier avec le code suivant et attribuez-le à votre objet FILE précédemment créé: pInput = fopen("filename", "r")
fgets (buf, sizeof (buf), pInput)
Analysez le CSV à l'aide de la fonction "strtok". Créez une nouvelle chaîne de caractères pour pointer vers les jetons et initialisez-la avec les données de la ligne lue ci-dessus: char *tok = strtok (buf, ",")
Convertissez le jeton reçu en données appropriées. En utilisant l'exemple de ligne: 1, "test", 3.45 convertissez les données contenues dans "tok" en un entier en utilisant le code suivant: row.col1 = atoi (tok);
Pour les lectures suivantes à partir de la même ligne, transmettez à "strtok" un paramètre NULL au lieu de la chaîne de mémoire tampon que vous avez lue auparavant: tok = strtok (NULL, ",") Ensuite, convertissez le jeton en le type de données approprié. En utilisant l'exemple de ligne 1,"test",3.45 Le code d'analyse pour une seule ligne serait: char *tok = strtok (buf, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);
Faites cela pour toutes les entrées sur chaque ligne du fichier CSV. La fonction "strtok" continuera à fournir les données entre les valeurs des virgules jusqu'à ce qu'il n'y ait plus de données dans le tampon, auquel cas elle renverra NULL. Cela indiquera que vous avez terminé avec la ligne.
Avertissement
La fonction "fopen" peut retourner NULL s'il y a eu une erreur -- assurez-vous de vérifier votre fichier avant de l'utiliser. Dans certains cas, les jetons fournis peuvent ne pas être au format attendu. Assurez-vous d'examiner vos données avant de convertir aveuglément en vérifiant les valeurs d'erreur courantes (la chaîne vide, NULL, etc.).