Cómo leer un archivo CSV en C

Consulte la documentación del programa que proporciona el archivo CSV. Determine la cantidad de campos en cada línea, así como el formato de cada campo. Por ejemplo, si un programa proporciona un CSV con los siguientes datos: 1, "prueba", 34.5, marcaría tres campos: un entero, una cadena y un número de coma flotante.

Cree una estructura que contenga un miembro de datos para cada campo identificado en el CSV. Usando la línea de ejemplo proporcionada de 1, "prueba", 34.5, necesitaría la siguiente estructura: struct data {int col1; char * col2; flotar col3; };

Cree un método en su programa que se encargará de leer el archivo CSV. Esto deberá ser accesible para el resto de su programa, y ​​probablemente tendrá que trabajar en estructuras de datos comunes para que otros métodos puedan acceder a los datos que se han leído. Pase el parámetro por referencia para eliminar la necesidad de un valor de retorno. Un prototipo de función de ejemplo sería: void ParseCSV (char * nombre de archivo, datos y entrada);

Cree un objeto de archivo, que leerá los datos, usando el siguiente código: FILE * pInput;

Cree un búfer de caracteres lo suficientemente grande como para contener una línea del archivo a la vez. Debido a las limitaciones del idioma, la forma más sencilla de hacerlo es declarar una matriz de caracteres de un tamaño suficientemente grande, como con: #define BUFFER_SIZE 1024

Abra el archivo con el siguiente código y asígnelo a su objeto ARCHIVO creado previamente: pInput = fopen ("nombre de archivo", "r")

fgets (buf, tamaño de (buf), pInput)

Analice el CSV usando la función "strtok". Cree una nueva cadena de caracteres para apuntar a los tokens e inicialícela con los datos de la línea leída arriba: char * tok = strtok (buf, ",")

Convierta el token recibido en los datos adecuados. Usando la línea de ejemplo: 1, "prueba", 3.45 convierta los datos contenidos en "tok" en un número entero usando el siguiente código: row.col1 = atoi (tok);

Para lecturas posteriores de la misma línea, pase "strtok" un parámetro NULL en lugar de la cadena de búfer que leyó antes: tok = strtok (NULL, ",") Luego, convierta el token al tipo de datos apropiado. Usando la línea de ejemplo 1, "prueba", 3.45 El código de análisis para una sola línea sería: char * tok = strtok (buf, ","); fila.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); fila.col3 = atof (tok);

Haga esto para todas las entradas en cada línea del CSV. La función "strtok" continuará proporcionando los datos entre valores de coma hasta que se quede sin datos en el búfer, momento en el que devolverá NULL. Esto indicará que ha terminado con la línea.

Advertencia

La función "fopen" puede devolver NULL si hubo un error - asegúrese de verificar su archivo antes de usarlo. En algunos casos, los tokens proporcionados pueden no tener el formato esperado. Asegúrese de examinar sus datos antes de realizar la conversión a ciegas comprobando los valores de error comunes (la cadena vacía, NULL, etc.).