>> Tecnologia eletrônica >  >> Lar inteligente >> Vida Inteligente

Como ler um arquivo CSV em C


Muitos produtos de software que lidam com números e cálculos têm a capacidade de gerar dados em um arquivo de valores separados por vírgula (CSV). Esse formato pode ser uma maneira eficaz de transportar dados entre diferentes programas, pois é legível e bastante fácil de manipular. Muitos programas C que lidam com dados provavelmente terão que ler um arquivo CSV em algum momento.

Etapa 1


Consulte a documentação do programa que está fornecendo o arquivo CSV. Determine o número de campos em cada linha, bem como o formato de cada campo. Por exemplo, se um programa fornece um CSV com os seguintes dados:1, "teste", 34.5 Você marcaria três campos:um inteiro, uma string e um número de ponto flutuante.

Etapa 2


Crie uma estrutura contendo um membro de dados para cada campo identificado no CSV. Usando a linha de exemplo fornecida de 1, "test", 34.5, você precisaria da seguinte estrutura:struct data { int col1; caractere *col2; flutuar col3; };

Etapa 3


Crie um método em seu programa que irá lidar com a leitura do arquivo CSV. Isso precisará ser acessível ao resto do seu programa e provavelmente precisará trabalhar em estruturas de dados comuns para que outros métodos possam acessar os dados que foram lidos. Passe o parâmetro por referência para remover a necessidade de um valor de retorno . Um exemplo de protótipo de função seria:void ParseCSV( char *filename, data&input );

Etapa 4


Inclua o cabeçalho de E/S padrão usando o seguinte código:#include Adicione este código ao topo do arquivo de origem que lerá o CSV.

Etapa 5


Inclua a biblioteca de strings para permitir a manipulação dos dados CSV usando o seguinte código:#include Adicione este código ao topo do arquivo de origem que lerá o CSV.

Etapa 6


Crie um objeto de arquivo, que irá ler os dados, utilizando o seguinte código:FILE * pInput;

Etapa 7


Crie um buffer de caracteres grande o suficiente para conter uma linha do arquivo por vez. Devido às restrições da linguagem, a maneira mais direta de fazer isso é declarar um array de caracteres de tamanho suficientemente grande, como em:#define BUFFER_SIZE 1024

char buf[BUFFER_SIZE];

Etapa 8


Abra o arquivo com o seguinte código e atribua-o ao seu objeto FILE criado anteriormente:pInput =fopen("filename," "r")

Etapa 9


Leia uma linha do arquivo usando o seguinte código:

fgets(buf, sizeof(buf), pInput)

Etapa 10


Analise o CSV usando a função "strtok". Crie uma nova string de caracteres para apontar para os tokens e inicialize-a com os dados da linha lida acima:char *tok =strtok(buf, ","")

Etapa 11


Converta o token recebido nos dados apropriados. Usando a linha de exemplo:1, "test", 3.45 converta os dados contidos em "tok" para um inteiro usando o seguinte código:row.col1 =atoi(tok);

Etapa 12


Para leituras subsequentes da mesma linha, passe "strtok" um parâmetro NULL em vez da string de buffer que você leu antes:tok =strtok(NULL, ","") Em seguida, converta o token para o tipo de dados apropriado. Usando a linha de exemplo 1,"test",3.45 O código de análise para uma única linha seria:char *tok =strtok(buf, ","); linha.col1 =atoi(tok); tok =strtok(NULL, ","); linha.col2 =tok; tok =strtok(NULL, ","); linha.col3 =atof(tok);

Etapa 13


Faça isso para todas as entradas em cada linha do CSV. A função "strtok" continuará a fornecer os dados entre os valores de vírgula até ficar sem dados no buffer, quando retornará NULL. Isso indicará que você terminou com a linha.

Dica


Encapsule sua conversão de dados em outro método para tornar o código mais legível. O método "fgets" retornará NULL quando o arquivo for completamente lido. Use isso em um loop while para percorrer todo o arquivo.

Aviso


A função "fopen" pode retornar NULL se houver um erro - certifique-se de verificar seu arquivo antes de usá-lo. Em alguns casos, os tokens fornecidos podem não ter o formato esperado. Certifique-se de examinar seus dados antes de converter cegamente, verificando os valores de erro comuns (a string vazia, NULL, etc).