从文件中读取选项

时间:2010-03-27 21:50:31

标签: c file

我想编写一个函数来读取文本文件中的值并将它们写入变量。例如我的文件是:

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 个答案:

答案 0 :(得分: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或类似情况。

答案 1 :(得分: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()的格式非常相似。