Tecnología

Inicio

Cómo leer un archivo CSV en C

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 datos de salida en un archivo de valores separados por comas (CSV). Este formato puede ser una manera eficaz de transporte de datos entre diferentes programas, ya que es fácil de leer y bastante fácil de manipular. Muchos programas en C que tienen que ver con los datos probablemente tendrán que leer de un archivo CSV en algún momento.

Instrucciones

1 Consulte la documentación del programa que está proporcionando el archivo CSV. Determinar 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

Se podría marcar hasta tres campos: un entero, una cuerda y un número de coma flotante.

2 Crear una estructura que contiene un miembro de datos para cada campo identificado en el CSV. Usando la línea de ejemplo proporcionado fotos de 1, "prueba", 34.5 se necesitaría la siguiente estructura:

datos struct

{

int col1;

col2 char *;

col3 flotar;

};

3 Crear un método en su programa que se encargará de leer el archivo CSV. Esto tendrá que ser accesible para el resto de su programa, y ​​es probable que tenga que trabajar en estructuras de datos comunes para que otros métodos pueden acceder a los datos que se ha leído en. Pase el parámetro por referencia para eliminar la necesidad de un valor de retorno . Un prototipo de función de ejemplo sería:

ParseCSV anular (char * nombre de archivo, datos y de entrada);

4 Incluya la cabecera estándar IO usando el siguiente código:

incluir <stdio.h>

Agregue este código al principio del archivo de origen que va a leer el archivo CSV.

5 Incluya la biblioteca de cadenas para permitir la manipulación de los datos CSV utilizando el siguiente código:

incluir <string.h>

Agregue este código al principio del archivo de origen que va a leer el archivo CSV.

6 Crear un objeto de archivo, que será leído en los datos, usando el siguiente código:

ARCHIVO * PInput;

7 Crear un buffer de caracteres lo suficientemente grande como para contener una línea del archivo a la vez. Debido a las limitaciones de la lengua, la forma más sencilla de hacer esto es declarar una matriz de caracteres de un tamaño suficientemente grande, como en:

definir BUFFER_SIZE 1024

charlas buf [BUFFER_SIZE];

8 Abra el archivo con el código siguiente y asignarlo a su objeto de archivo creado anteriormente:

PInput = fopen ( "nombre de archivo", "r")

9 Leer en una línea del archivo usando el siguiente código:

fgets (buf, sizeof (buf), PInput)

10 Analizar el CSV usando la función "strtok". Crear una nueva cadena de caracteres para apuntar a las fichas, e inicializar con los datos de la línea de lectura de arriba:

char * tok = strtok (buf, "")

11 Convertir la señal recibida en los datos apropiados. Usando la línea de ejemplo:

1, "prueba", 3,45

convertir los datos contenidos en "tok" a un entero usando el siguiente código:

row.col1 = atoi (TdC);

12 Para las lecturas subsiguientes de la misma línea, pasar "strtok" un parámetro NULL en lugar de la cadena de búfer antes de que se lee en:

tok = strtok (NULL, "")

A continuación, convertir el token al tipo de datos adecuado. 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, "");

row.col1 = atoi (TdC);

tok = strtok (NULL, "");

row.col2 = tok;

tok = strtok (NULL, "");

row.col3 = atof (tok);

13 Hacer esto para todas las entradas en cada línea de la CSV. El "strtok" función continuará proporcionando los datos entre los valores de coma hasta que se agote de datos en el búfer, en cuyo punto se devolverá NULL. Esto indicará que ha terminado con la línea.

Consejos y advertencias

  • Encapsular la conversión de datos en otro método para hacer el código más legible.
  • El método "fgets" devolverá NULL cuando el archivo se ha leído completamente. Utilizar esto en un bucle while para atravesar todo el archivo.
  • La función "fopen" puede devolver NULL si hubo un error - asegúrese de comprobar su archivo antes de usarlo.
  • En algunos casos, los tokens proporcionados no pueden ser del formato esperado. Asegúrese de examinar los datos antes de la conversión a ciegas por comparación con los valores de error comunes (la cadena vacía, NULL, etc).