Muitos softwares que lidam com números e cálculos podem exportar dados para arquivo CSV (Comma Separated Values). Este formato é eficaz para transportar dados entre programas, sendo legível e fácil de manipular. Muitos programas C que lidam com dados provavelmente precisarão ler CSV em algum momento.
Consulte documentação do programa que fornece o CSV. Determine número de campos por linha e formato de cada campo. Exemplo: se CSV tem "1, \"teste\", 34.5", anote três campos: inteiro, string, ponto flutuante.
Crie estrutura (struct) contendo membro para cada campo identificado. Usando exemplo "1, \"teste\", 34.5": struct data { int col1; char *col2; float col3; };
Crie método no programa para ler o CSV. Precisa ser acessível ao resto do programa e trabalhar em estruturas de dados comuns para outros métodos acessarem dados lidos. Passe parâmetro por referência para evitar valor de retorno. Prototipo exemplo: void ParseCSV( char *filename, data& input );
Inclua header IO padrão: #include <stdio.h> Adicione no topo do arquivo fonte que lerá o CSV.
Inclua biblioteca string para manipular dados CSV: #include <string.h> Adicione no topo do arquivo fonte.
Crie objeto arquivo para ler dados: FILE * pInput;
Crie buffer de caractere grande o suficiente para uma linha por vez. Devido a restrições da linguagem, forma direta é declarar array de char de tamanho suficiente: #define BUFFER_SIZE 1024; char buf[BUFFER_SIZE];
Abra arquivo e atribua ao objeto FILE: pInput = fopen("filename," "r")
Leia uma linha do arquivo: fgets(buf, sizeof(buf), pInput)
Faça parse do CSV usando "strtok". Crie nova string char para apontar tokens, inicialize com dados da linha lida: char *tok = strtok(buf, ",")
Converta token recebido no tipo apropriado. Usando exemplo "1, \"teste\", 3.45": converta "tok" para inteiro: row.col1 = atoi(tok);
Para leituras subsequentes da mesma linha, passe NULL para "strtok" em vez do buffer: tok = strtok(NULL, ","). Converta token ao tipo apropriado. Código de parse para linha única: char *tok = strtok(buf, ","); row.col1 = atoi(tok); tok = strtok(NULL, ","); row.col2 = tok; tok = strtok(NULL, ","); row.col3 = atof(tok);
Faça isso para todas as entradas de cada linha do CSV. "strtok" continuará fornecendo dados entre vírgulas até acabar dados no buffer, retornando NULL — indicando fim da linha.
Encapsule conversão de dados em outro método para código mais legível. "fgets" retorna NULL quando arquivo lido completamente. Use em loop while para percorrer arquivo todo.
"fopen" pode retornar NULL se erro — verifique arquivo antes de usar. Em alguns casos, tokens podem não ter formato esperado. Examine dados antes de converter cegamente verificando contra valores de erro comuns (string vazia, NULL, etc).
Tecnologia Eletrônica © [www.351231.com]