2010-03-27 2 views
2

Я хотел бы написать функцию, которая будет считывать значения из текстового файла и записывать их в переменные. Например, мой файл:Параметры чтения из файла

mysql_server localhost 
mysql_user root 
mysql_passworg abcdefg 
mysql_database testgenerator 
log log.txt 
username admin 
password abcd 

и у меня те же переменные, что и первое слово в строке. Так как сделать функцию чтения данных из файла и сделать STH так:

char *mysql_server = localhost; 
char *mysql_user = root; 
... 

Я понятия не имею, даже как начать писать его ...

+0

«do sth like this:» означает записать его в другой текстовый файл для источника C или что? В таком случае вам придется вводить кавычки с экранами. fprintf (myfile, "char * mysql_server = \" localhost \ "; \ n"); –

ответ

1

Чтобы открыть и закрыть файл, вы используете:

strFName = "my_file.txt" 
FILE* my_file; 
my_file = fopen(strFName, "r"); // "r" - read option. Returns NULL if file doesn't exist 
/** operations on file go here **/ 
fclose(my_file); // must be called when you're done with the file 

Для аргументов чтения, как вы спрашиваете - это, кажется, простой случай, и fscanf является простым решением. Формат будет примерно таким:

char arg1[30], arg2[30]; 
fscanf(my_file, "%s %s", arg1, arg2); // reads two strings - one into arg1, the second into arg2 

Читайте на scanf - достаточно документации. Но суть в этом: fscanf(FILE* f, char* format, void* p_arg1, void* p_arg2...) позволяет читать аргументы из файла в указатели, которые вы предоставляете, с форматом, очень похожим на формат printf().

+0

Вы должны ограничить символы, прочитанные fscanf, чтобы избежать переполнения. –

1

Для вашего простого случая:

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

char *xstrdup(const char *string) { 
    return strcpy(malloc(strlen(string) + 1), string); 
} 


char *mysql_server; 
char *mysql_user; 
... 

FILE * f = fopen("/path/to/file.conf", "r"); 
while(!feof(f)) { 
    if(fscanf(f, "%s %s", &variable, &value) == 2){ 
     if(strcmp(variable, "mysql_server") == 0){ 
      mysql_server = xstrdup(value); 
     } else if(strcmp(variable, "mysql_user") == 0) { 
      mysql_user = xstrdup(value); 
     } else ... 
    } 
} 

Для более сложной проверки чека libconfig или аналогичной.

+0

Вы хотите сказать: 'mysql_server = xstrdup (value)' и т. Д.? –

+0

Да, если бы это было отредактировано, то. – clyfe

+0

Исправление: strcmp retval должен быть отмечен как == 0 – ostefano

Смежные вопросы