LINUX.ORG.RU

C & config file


0

0

Народ, подскажите плз либу(ы) под Цэ, с помощью которой можно было бы
легко парсить конфиг файлы и достаточно простые типа

A = 2
B = 7
# Это комментарий
... и т.д.

и посложней.

anonymous

Ответ на: комментарий от Reset

static char *
splitstr (char *str, config_err *errcode)
{
  char *p;
  int quote = 0;
  static char *save_nextstr;
  char buf[MAXLINE];
  char *bp = buf;
  *errcode = OK;

  if (str == NULL)
    {
      if (save_nextstr == NULL)
	{
	  *errcode = EMPTY;
	  return NULL;
	}

      str = save_nextstr;
    }

  for (p = str; *p != '\0'; p++)
    {
      if (*p == '#' && !quote)	//comment
	break;

      if (isspace (*p) && !quote) //XXX
	continue;

      if ((*p == '=') && !quote)
	{
	  save_nextstr = p + 1;
	  break;
	}
	
      else if (*p == '\"' && (p >= str && *(p - 1) != '\\'))
	{
	  quote ^= 1;
	}

      else
	{
	  *bp = (*p);
	  bp++;
	}
    }

  *bp = '\0';

  if (buf[0] == '\0')
    {
      *errcode = EMPTY;
      return NULL;
    }

  else if (quote != 0)
    {
      *errcode = PARSE_ERROR;
      return NULL;
    }
  
  return strdup (buf);
}


static config_err
parse_line (char *line, char **name, char **val)
{
  config_err err;

  *name = splitstr (line, &err);

  if (*name == NULL)
    return err != OK ? err : INTERNAL_ERROR;

  *val = splitstr (NULL, &err);
  
  if (*val == NULL)
    {
      free (*name);  
      return err!=OK ? err : INTERNAL_ERROR;
    }
  
  return OK;
}

OxiD ★★★★
()
Ответ на: комментарий от OxiD

Хотя конечно можно обойти, но мне показалось что так проще.

OxiD ★★★★
()

как вариант, нагенерировать Ragel'ем парсер для разбора конфигов описанной грамматики. Получится аккуратный конечный автомат.

anonymous
()

GLib GKeyFile, парсит/создаёт key-value(ini) файлы. Хорошие возможности + легко осваиваем

grishkin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.