C:
Trabalhando com CSV

Como fazer:

Lendo Arquivos CSV

Para ler um arquivo CSV em C, usamos funções padrão de E/S de arquivos juntamente com funções de manipulação de strings para analisar cada linha. Abaixo está um exemplo básico de leitura de um arquivo CSV e impressão dos campos de cada linha no console.

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

int main() {
    FILE *fp = fopen("data.csv", "r");
    if (!fp) {
        printf("Não é possível abrir o arquivo\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;
}

Exemplo de data.csv:

Name,Age,Occupation
John Doe,29,Engenheiro de Software

Saída de Exemplo:

Name
Age
Occupation
John Doe
29
Engenheiro de Software

Escrevendo em Arquivos CSV

Da mesma forma, escrever em um arquivo CSV envolve usar fprintf para salvar dados em um formato separado por vírgulas.

#include <stdio.h>

int main() {
    FILE *fp = fopen("output.csv", "w");
    if (!fp) {
        printf("Não é possível abrir o arquivo\n");
        return 1;
    }

    char *headers[] = {"Name", "Age", "Occupation", NULL};
    for (int i = 0; headers[i] != NULL; i++) {
        fprintf(fp, "%s%s", headers[i], (headers[i+1] != NULL) ? "," : "\n");
    }
    fprintf(fp, "%s,%d,%s\n", "Jane Doe", 27, "Cientista de Dados");

    fclose(fp);
    return 0;
}

Conteúdo de output.csv de Exemplo:

Name,Age,Occupation
Jane Doe,27,Cientista de Dados

Aprofundamento

O formato CSV, embora aparentemente simples, vem com suas nuances, como lidar com vírgulas dentro dos campos e encapsular campos com aspas. Os exemplos rudimentares mostrados não contam com tais complexidades, nem lidam com possíveis erros de forma robusta.

Historicamente, o manejo de CSV em C tem sido em grande parte manual devido à natureza de baixo nível da linguagem e à falta de abstrações de alto nível embutidas para tarefas como essa. Esse gerenciamento manual inclui abrir arquivos, ler linhas, dividir strings e converter tipos de dados conforme necessário.

Embora a manipulação direta de arquivos CSV em C forneça experiências de aprendizagem valiosas sobre E/S de arquivos e manipulação de strings, várias alternativas modernas prometem eficiência e processos menos propensos a erros. Bibliotecas como libcsv e csv-parser oferecem funções abrangentes para ler e escrever arquivos CSV, incluindo suporte para campos entre aspas e delimitadores personalizados.

Alternativamente, ao trabalhar dentro de ecossistemas que o suportam, integrar-se com linguagens ou plataformas que fornecem funções de manipulação de CSV de alto nível (como Python com sua biblioteca pandas) pode ser um caminho mais produtivo para aplicações que requerem pesado processamento de CSV. Esta abordagem entre linguagens aproveita a performance e as capacidades de programação de sistemas de C enquanto utiliza a facilidade de uso de outras linguagens para tarefas específicas como o manejo de CSV.