Cómo leer un archivo CSV en C (En 13 Pasos)

Por matt billock
Cómo leer un archivo CSV en C (En 13 Pasos)
calculation image by lefty from Fotolia.com

Muchos programas de software que pueden tratar con números y cálculos puedan proporcionar datos en un archivo CSV (Valores Separados por Comas). Este formato puede ser una forma efectiva de transportar los datos entre varios programas, ya que se puede leer y manipular fácilmente. Muchos programas en C que usan datos seguramente leerán de un archivo CSV en algún momento.

Paso 1

Consulta la documentación del programa que te dará el archivo CSV. Averigua el número de campos de cada línea, así como el formato de cada campo. Por ejemplo, si el programa te da un CSV con estos datos: 1, "test", 34.5 Marcarías 3 campos: un entero, una cadena y un número en punto flotante.

Paso 2

Crea una estructura que tanga un dato miembro de cada campo identificado en el CSV. Usando la línea del ejemplo 1, "test", 34.5 necesitarás esta estructura: { int col1; char *col2; float col3; };

Paso 3

Crea un método en tu programa que trate con la lectura de archivos CSV. Esto deberá estar accesible desde el resto del programa, y seguramente deberás trabajar con estructuras de datos normales para que el resto de métodos puedan acceder a los datos que se han leído. Pasa el parámetro por referencia para no tener que devolver un valor. Un prototipo de función de ejemplo sería: void ParseCSV( char *filename, data& input );

Paso 4

Incluye la cabecera estándar IO usando este código:

include

Añade este código en la parte superior del archivo fuente que leerá el CSV.

Paso 5

Incluye la biblioteca de cadenas para permitir la manipulación de los datos del CSV usando este código:

include

Añade este código en la parte superior del archivo fuente que leerá el CSV.

Paso 6

Crea un objeto de archivo, que leerá los datos, usando este código: FILE * pInput;

Paso 7

Crea un buffer de caracteres lo bastante grande como para guardar una línea del archivo. Debido a las limitaciones del lenguaje, la forma más sencilla de hacer esto es declarar un vector de caracteres de con un tamaño lo suficientemente grande, como con:

define BUFFER_SIZE 1024

char buf[BUFFER_SIZE];

Paso 8

Abre el archivo con este código y asígnalo a tu objeto FILE creado antes: FILE object: pInput = fopen("filename," "r")

Paso 9

Lee una línea del archivo con este código: fgets(buf, sizeof(buf), pInput)

Paso 10

Analiza el CSV usando la función "strtok". Crea una nueva cadena de caracteres para apuntar a los elementos e inicialízala con los datos de la línea leída antes: char *tok = strtok(buf, ",")

Paso 11

Convierte el elemento recibido en datos adecuados. Usa la línea de ejemplo: 1, "test", 3.45 Convierte los datos de "tok" en un entero usando este código: row.col1 = atoi(tok);

Paso 12

Para más lecturas de la misma línea, pasa un parámetro NULL a "strtok" en lugar de la cadena de buffer leída antes: tok = strtok(NULL, ",") Después convierte el elemento al tipo de datos adecuado. Usa la línea de ejemplo 1,"test",3.45 El código de análisis para una línea sería: char *tok = strtok(buf, ","); row.col1 = atoi(tok); tok = strtok(NULL, ","); row.col2 = tok; tok = strtok(NULL, ","); row.col3 = atof(tok);

Paso 13

Haz esto para todas las entradas de cada línea del CSV. La función "strtok" seguirá dando datos entre valores de comas hasta que no tenga más datos en el buffer, momento en que devolverá NULL. Esto indica que has terminado con la línea.