Чтение опций из файла - PullRequest
       10

Чтение опций из файла

2 голосов
/ 28 марта 2010

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 28 марта 2010

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

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 ().

1 голос
/ 28 марта 2010

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

#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 или аналогичный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...