Bife’s Head

#include “bifehead.h”

Posts com Tag ‘readConf()’

Função readConf()

Publicado por B i f e em Abril 14, 2008

Linguagem: C.

Algum tempo atrás, para treinar o uso de ponteiros e manipulação de arquivos em C, resolvi escrever uma pequena função para ler arquivos de configuração no estilo “opção: valor”. O resultado está aí:

char *readConf(char *option, char delim, char coment, FILE *arquivo){

  char *value; /* Valor da option. */
  char *aux, line[128];
  int size;

  while (fgets(line,128,arquivo) != NULL){

    if (ferror(arquivo)){
      perror("\n**ERRO ao ler arquivo em readConf.** ");
      exit(1);
    }
    line[strlen(line)-1]= '';

    if (feof(arquivo)) break;

    if (*line == coment) continue;

    if (strstr(StrLwr(line),StrLwr(option))){

      aux= strchr(line,delim);
      aux++;

      while( *aux==' ' || *aux=='\t' )
          aux++;

      for (size=0; *aux; ++size,aux++);

      value= (char *)calloc(size+1,sizeof(char));
      aux-= size;

      memcpy(value,aux,size);
      *(value+size+1)= '';

      return (value);
    }

  }

  return (NULL);
}

Cabeçalhos necessários:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

Protótipo:

char *readConf(char *option, char delim, char coment, FILE *arquivo);

Vamos entender os parâmetros que devem ser passados:

char *option: A opção cujo valor deve ser retornado.

char delim: O delimitador que será usado entre a opção e o seu valor, por exemplo, ‘:’, ‘=’, etc.

char coment: Caracter usado para determinar se uma linha é um comentário. Geralmente é um jogo da velha: ‘#’.

FILE *arquivo: O arquivo que contém as configurações.

Dependências:

Como não existe a função strlwr() no mundo ANSII C, resolvi escreve-la também:

char *StrLwr(const char *str){

  register int count;
  char *str_lwr;

  for(count=0;str[count];count++);

  str_lwr= (char *)malloc(sizeof(char)*(count+1));

  while(*str){
    *str_lwr= tolower(*str);
    str_lwr++;
    str++;
  }
  *str_lwr= '';

  return (str_lwr-count);
}

Enviado em Programação | Tagged: , , | Deixar um comentário »