首页 > 解决方案 > 从文件中读取特定变量并将它们的值分配给我的代码中的变量

问题描述

我不太实际c或“c做事的方式”,我偶然发现了一个问题。我有一个包含一些变量及其相应值的文件,例如

Var1 1
Var2 15
Var3 1.6
var4 SomeText

如何从此文件中读取变量并将其分配给代码中具有相应名称的变量?我正在寻找以下风格的东西

double Var3 = ReadFromFile(File, "Var3");

所以我的主要尝试集中在尝试解析文件中的“Var3”部分,但我无法做到这一点c,所以任何帮助将不胜感激。我不想简单地按顺序读取文件,因为文件中变量的位置也应该是任意的

var4 SomeText
Var2 15
Var1 1
Var3 1.6

应该是可读的。到目前为止我的代码是

FILE* InstFile = fopen("Filename", "r");
char row[128];
while(fgets(row, sizeof(row), InstFile) != NULL) {
    //I don't know what to put here to select only the text I want and extract the value.
}

标签: cfile

解决方案


这是一个使用strtokstrtod获取double基于您输入的字符串的函数:

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

#define WHITESPACE " \t\r\n"

double get_double_from_file(FILE *fp, const char *var_name)
{
    rewind(fp);
    for (char *vname, buf[1024]; fgets(buf, sizeof buf, fp);)
    {
        if (strcmp((vname = strtok(buf, WHITESPACE)), var_name) == 0)
        {
            char *vstr = strtok(NULL, WHITESPACE);
            char *errptr;
            double dv = strtod(vstr, &errptr);
            if (*errptr != '\0')
            {
                // handle error
            }
            return dv;
        }
    }
    // handle if string not found
    return 0.0;
}

int main(void)
{
    FILE *fp = fopen("foo.txt", "r");
    printf("%lf\n", get_double_from_file(fp, "Var2"));
}

所以如果我foo.txt是:

Var1 1.23
Var2 4.56
Var3 7.89

输出是:

4.560000

推荐阅读