Como ler um arquivo CSV em C

click fraud protection

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 fornecer a um CSV os seguintes dados: 1, "teste", 34.5 Você marcaria três campos: um inteiro, uma string e um número de ponto flutuante.

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

Crie um método em seu programa que processe a leitura do arquivo CSV. Isso precisará estar acessível para o 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 eliminar a necessidade de um valor de retorno. Um exemplo de protótipo de função seria: void ParseCSV (char * filename, data & input);

Crie um objeto de arquivo, que fará a leitura dos dados, utilizando o seguinte código: FILE * pInput;

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 uma matriz de caracteres de tamanho suficientemente grande, como com: #define BUFFER_SIZE 1024

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

fgets (buf, sizeof (buf), pInput)

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, ",")

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

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, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);

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

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).