Como ler um arquivo CSV no c

programas de tabulação e cálculo pode dados de saída em formato CSV

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:

    incluir

    Adicione 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:

    incluir

    Adicione 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 1024

    carbonizar 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).
De esta maneira? Compartilhar em redes sociais:

LiveInternet