C:
Trabajando con CSV

Cómo hacerlo:

Leyendo Archivos CSV

Para leer un archivo CSV en C, utilizamos funciones estándar de E/S de archivos junto con funciones de manipulación de cadenas para analizar cada línea. A continuación, se muestra un ejemplo básico de lectura de un archivo CSV e impresión de los campos de cada fila en la consola.

#include <stdio.h>
#include <string.h>

int main() {
    FILE *fp = fopen("data.csv", "r");
    if (!fp) {
        printf("No se puede abrir el archivo\n");
        return 1;
    }

    char buf[1024];
    while (fgets(buf, 1024, fp)) {
        char *campo = strtok(buf, ",");
        while(campo) {
            printf("%s\n", campo);
            campo = strtok(NULL, ",");
        }
    }

    fclose(fp);
    return 0;
}

Ejemplo de data.csv:

Nombre,Edad,Ocupación
John Doe,29,Ingeniero de Software

Salida de Ejemplo:

Nombre
Edad
Ocupación
John Doe
29
Ingeniero de Software

Escribiendo en Archivos CSV

De manera similar, escribir en un archivo CSV implica usar fprintf para guardar datos en un formato separado por comas.

#include <stdio.h>

int main() {
    FILE *fp = fopen("output.csv", "w");
    if (!fp) {
        printf("No se puede abrir el archivo\n");
        return 1;
    }

    char *encabezados[] = {"Nombre", "Edad", "Ocupación", NULL};
    for (int i = 0; encabezados[i] != NULL; i++) {
        fprintf(fp, "%s%s", encabezados[i], (encabezados[i+1] != NULL) ? "," : "\n");
    }
    fprintf(fp, "%s,%d,%s\n", "Jane Doe", 27, "Científica de Datos");

    fclose(fp);
    return 0;
}

Contenido de Ejemplo de output.csv:

Nombre,Edad,Ocupación
Jane Doe,27,Científica de Datos

Análisis Profundo

El formato CSV, aunque aparentemente sencillo, viene con sus matices, como el manejo de comas dentro de los campos y la encapsulación de campos con comillas. Los ejemplos rudimentarios mostrados no tienen en cuenta tales complejidades, ni manejan los errores potenciales de manera robusta.

Históricamente, el manejo de CSV en C ha sido principalmente manual debido a la naturaleza de bajo nivel del lenguaje y la falta de abstracciones de alto nivel incorporadas para tales tareas. Esta gestión manual incluye abrir archivos, leer líneas, dividir cadenas y convertir tipos de datos según sea necesario.

Aunque la manipulación directa de archivos CSV en C proporciona valiosas experiencias de aprendizaje sobre E/S de archivos y manejo de cadenas, varias alternativas modernas prometen eficiencia y procesos menos propensos a errores. Bibliotecas como libcsv y csv-parser ofrecen funciones completas para leer y escribir archivos CSV, incluyendo soporte para campos entre comillas y delimitadores personalizados.

Alternativamente, cuando se trabaja dentro de ecosistemas que lo soportan, integrarse con lenguajes o plataformas que proporcionan funciones de manipulación de CSV de alto nivel (como Python con su biblioteca pandas) puede ser un camino más productivo para aplicaciones que requieren un procesamiento intensivo de CSV. Este enfoque interlenguaje aprovecha el rendimiento de C y las capacidades de programación de sistemas mientras utiliza la facilidad de uso de otros lenguajes para tareas específicas como el manejo de CSV.