从文本文件中读取变量
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<std::string, Type>
键入标识符来完成。您可以将其填充为:
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 等语言获得满足此要求的工作(尽管速度很慢)程序会更容易。
【讨论】:
以上是关于从文本文件中读取变量的主要内容,如果未能解决你的问题,请参考以下文章