Cómo leer un archivo CSV en C

Muchos productos de software que se ocupan de números y cálculos tienen la capacidad de generar datos en un archivo de valores separados por comas (CSV). Este formato puede ser una forma efectiva de transportar datos entre diferentes programas, ya que es legible y bastante fácil de manipular. Es probable que muchos programas en C que manejan datos tengan que leer un archivo CSV en algún momento.

Paso 1

Consulte la documentación del programa que proporciona el archivo CSV. Determine el número 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 número entero, una cadena y un número de coma flotante.

Paso 2

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, "test", 34.5, necesitaría la siguiente estructura:struct data { int col1; char *col2; flotante col3; };

Paso 3

Cree un método en su programa que maneje la lectura del archivo CSV. Esto deberá ser accesible para el resto de su programa y probablemente necesitará 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&entrada );

Paso 4

Incluya el encabezado de E/S estándar con el siguiente código:#include Agregue este código en la parte superior del archivo fuente que leerá el CSV.

Paso 5

Incluya la biblioteca de cadenas para permitir la manipulación de los datos CSV usando el siguiente código:#include Agregue este código en la parte superior del archivo fuente que leerá el CSV.

Paso 6

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

Paso 7

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 lenguaje, la forma más sencilla de hacer esto es declarar una matriz de caracteres de un tamaño suficientemente grande, como con:#define BUFFER_SIZE 1024

char buf[BUFFER_SIZE];

Paso 8

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

Paso 9

Lea una línea del archivo usando el siguiente código:

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

Paso 10

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, ",")

Paso 11

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

Paso 12

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,"test",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(NULO, ","); fila.col2 =tok; tok =strtok(NULO, ","); fila.col3 =atof(tok);

Paso 13

Haga esto para todas las entradas en cada línea del CSV. La función "strtok" seguirá 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.

Consejo

Encapsule su conversión de datos en otro método para que el código sea más legible. El método "fgets" devolverá NULL cuando el archivo se haya leído por completo. Use esto en un ciclo while para recorrer todo el archivo.

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 convertirlos a ciegas comprobando los valores de error comunes (la cadena vacía, NULL, etc.).