Muitos produtos de software que lidam com números e cálculos têm a capacidade de dados de saída em um arquivo de valores separados por vírgulas (CSV). Este formato pode ser uma forma eficaz de transporte de dados entre diferentes programas, como é legível e bastante fácil de manipular. Muitos programas em C que lidam com dados provavelmente vai ter que ler um arquivo CSV em algum ponto.
Coisas que você precisa
- Editor de texto
- Compilador
- entrada de arquivo CSV
Consulte a documentação do programa que está fornecendo o arquivo CSV. Determinar o número de campos em cada linha, assim como o formato de cada campo. Por exemplo, se um programa fornece uma CSV com os seguintes dados:
1, "teste", 34,5
Você iria anotar três campos: um inteiro, uma corda e um número de ponto flutuante.
Criar uma estrutura que contém um membro de dados para cada campo identificado no CSV. Usando o exemplo da linha fornecida de 1, "teste", 34,5 você precisaria a seguinte estrutura:
dados struct
{
int col1;
char * col2;
flutuar col3-
};
Criar um método em seu programa que vai lidar com a leitura do arquivo CSV. Isto terá de ser acessível para o resto do seu programa, e provavelmente vai precisar de trabalhar em estruturas de dados comuns para que outros métodos podem acessar os dados que foi lido em. Passe o parâmetro por referência para remover a necessidade de um valor de retorno . Um protótipo de função exemplo seria:
vazio ParseCSV (char * filename, dados& de entrada);
Incluir o padrão de IO usando o seguinte código:
incluirAdicione este código para o início do arquivo de origem que será a leitura do CSV.
Incluir a biblioteca string para permitir a manipulação dos dados CSV usando o seguinte código:
incluirAdicione este código para o início do arquivo de origem que será a leitura do CSV.
Criar um objeto de arquivo, que irá ler os dados, usando o seguinte código:
FILE * pInput;
Criar um buffer de caracteres grande o suficiente para manter uma linha do arquivo de cada vez. Devido a limitações da linguagem, a maneira mais simples de fazer isso é declarar uma matriz de caracteres de um suficientemente grande tamanho, como em:
definir BUFFER_SIZE 1024carbonizar buf [BUFFER_SIZE];
Abra o arquivo com o seguinte código, e atribuí-lo ao seu objeto de arquivo criado anteriormente:
pInput = fopen ("nome do arquivo," "r")
Leia em uma linha do arquivo usando o seguinte código:
fgets (buf, sizeof (buf), pInput)
Analisar o CSV usando a função "strtok". Criar uma nova cadeia de caracteres para apontar para as fichas, e inicialize-o com os dados da linha lida em cima:
char * tok = strtok (buf, ",")
Converter o sinal recebido para os dados apropriados. Usando a linha de exemplo:
1, "teste", 3,45
converter os dados contidos "tok" para 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 cadeia tampão de ler antes:
tok = strtok (NULL, ",")
Em seguida, converter o token para o tipo de dados apropriado. Usando a linha de exemplo
1,"teste", 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 vírgula até que se esgote de dados no buffer, altura em que ele retornará NULL. Isso vai indicar que você terminou com a linha.
dicas & avisos
- Encapsular a sua conversão de dados em outro método para tornar o código mais legível.
- o "fgets" método irá retornar NULL quando o arquivo foi completamente ler. Use isso em um loop while para atravessar o arquivo inteiro.
- A função "fopen" pode retornar NULL se houve um erro - certifique-se de verificar o seu arquivo antes de usá-lo.
- Em alguns casos, os sinais fornecidos podem não ser do formato esperado. Certifique-se de examinar seus dados antes cegamente converter marcando contra os valores de erro comuns (a cadeia vazia, NULL, etc).