>>Помогите ламеру. Есть конфигурационный файл следующего формата:
>>variable:<пробел>value\n
>>variable_x:<пробел>value1<пробел>value2\n
>>....
>>Как разобрать переменная=значение этот файл на C? Только не отсылайте пожалуйста к
>>документации :))
>
>Ребят, вам совсем влом помочь? Ну только я начал учиться С, совсем
>запутался в этих strcmp, strtok и т.д.
Ну, вот нечто похожее на разбор ini-файла, но код сырой и напильником нужно еще поработать.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define MAXLINE 1000
static FILE *fp = NULL;
static char *curfile = NULL;
static char *cursect = NULL;
static long int sectoffset;
static int inisearch(FILE *, const char *);
char *
inifetch(const char *file, const char *sect, const char *key)
{
static char line[MAXLINE];
char *p, *retp = NULL;
int len;
if(fp == NULL || curfile == NULL || strcmp(curfile, file) != 0)
{
if(fp != NULL)
fclose(fp);
if(curfile != NULL)
{ free(curfile); curfile = NULL; }
if(cursect != NULL)
{ free(cursect); cursect = NULL; }
fp = fopen(file, "r");
if(fp == NULL)
return NULL;
curfile = malloc(strlen(file) + 1);
if(curfile != NULL)
strcpy(curfile, file);
}
/* search for key */
len = strlen(key);
while(fgets(line, MAXLINE, fp) != NULL)
{
if(*line == '[')
break;
if(strncmp(line, key, len) == 0 &&
line[len] == '=')
{
retp = &line[len+1];
if((p = strrchr(retp, '\n')) != NULL)
*p = '\0';
break;
}
}
return retp;
}
static int
inisearch(FILE *fp, const char *sect)
{
char line[MAXLINE];
int len = strlen(sect);
while(fgets(line, MAXLINE, fp) != NULL)
{
if(*line != '[')
continue;
if(strncmp(&line[1], sect, len) == 0 &&
line[1+len] == ']')
return TRUE; /* found it */
}
return FALSE;
}