从文本文件中读取变量

Posted

技术标签:

【中文标题】从文本文件中读取变量【英文标题】:Reading variables from text file 【发布时间】:2011-01-17 10:38:09 【问题描述】:

我在c++中有一个问题,希望这里的高手可以帮助我。

问题是,有一个 .txt 文件,其中包含一些信息。我想编写一个使用这些信息的程序。

.txt 文件将如下所示:

variable 1: 711   
variable 2: [8 5 6 11]  
variable 3: xyz zyx yyy

程序应该从文件中读取值然后使用它们,知道怎么做吗?!!

/* 更新 */

应该做的是从文本文件中读取数值,只读取变量的数值,然后在实际程序中使用这些值。

例如读取变量 1 的值并放入变量 x,那么在程序中我们可以定义 整数 y=7*x ;

我知道如何读取文件,但我不知道如何读取变量的特定值。

基本上程序应该读取文件,识别变量名,获取值,然后使用它。

非常感谢

【问题讨论】:

你的问题是什么?你还有代码吗?为什么会失败? 请更具体一点,因为将变量写入文件很容易,只需两行! 您对.txt 文件有任何限制,或者您可以随意更改其格式吗? 基本指南cplusplus.com/doc/tutorial/files 【参考方案1】:

看起来你想要一些类似配置的文件来存储一些信息供你的程序使用。配置文件管理有很多实现(读取、检索、存储、保存)。我坚持小巧方便libconfig:http://www.hyperrealm.com/libconfig/ 它还支持整数、浮点和布尔变量,以及数组、列表和封闭部分。

【讨论】:

这正是我想要的,非常感谢。我会努力的,然后我会回来的。【参考方案2】:

我认为在您的问题中暗示变量可能具有不同的类型,例如数字、数组或字符串。在这种情况下,您必须决定是使用 boost::any<> 还是 boost::variant<>,还是创建自己的变量类型 ala:

struct Var

    enum  Double, String, Array  Type;
    Type type_;

    double double_;
    std::string string_;
    std::vector<double> array_;

    Var(Type t) : type_(t), double_(0)   // empty double/string/array
    Var(double d) : type_(Double), double_(d)  
    Var(const std::string& s) : type_(String), string_(s)  
    ...
;

或者,您可以使用 C++ 的内置多态性,并为每种实际数据类型提供一个基类和一个派生类。对您而言,始终存储文本表示形式并将所有内容存储在 std::string 中甚至可能就足够了。不管你怎么做,假设你将值存储在一个名为“Type”的类型中。

似乎变量的名称要在冒号的左边指定。如果您知道相应的变量将在您的程序中被硬编码,那么您可以将这些预先存在的变量设置为右侧的值。否则,您需要动态创建与这些标识符名称关联的变量:这可以通过std::map&lt;std::string, Type&gt; 键入标识符来完成。您可以将其填充为:

std::map<std::string, Type> variables;

variables["age"] = Type(28);
variables["name"] = Type("Fred");

为了解析实际的文本文件,您可以使用 iostreams。一次读一行 ala:

std::string line;
while (getline(cin, line))

    std::string::pos n = line.find(':');
    if (pos != std::string::npos)
    
        std::string identifier = line.substr(0, n - 1);
        Type var;
        
            // try parsing it as a number...
            std::istringstream iss = line.substr(n + 1);
            char c;
            double d;
            if (iss >> d && !(iss >> c))
                var = d;
        

        
            // try parsing it as an array...
            std::istringstream iss = line.substr(n + 1);
            var.clear(Array);
            double d;
            if (iss >> c && c == '[')
                while (iss >> d)
                    result.array_.push_back(d);
                if (iss && iss >> c && c == ']' && !(is >> c))
                    // parsed successfully as an array - use "result"
        
        
            // it's a string...
            var = line.substr(n + 1);
        

您应该尝试从这方面着手,并在遇到困难时寻求具体帮助。

注意:您可能会发现使用 Ruby、python 或 perl 等语言获得满足此要求的工作(尽管速度很慢)程序会更容易。

【讨论】:

以上是关于从文本文件中读取变量的主要内容,如果未能解决你的问题,请参考以下文章

C ++从文本文件中读取并将其分成变量

在C++中如何读取文本中的数据存储为数组变量?

想从文本文件中读取整数

如何用VBS逐行读取文本文件的内容,并输入变量

如何在 Java 中真正从类路径中读取文本文件

如何在 Java 中真正从类路径中读取文本文件