如何将变量分配给持久数据?

时间:2009-07-07 02:16:46

标签: c++ ini persistent-data

基本上,我想让我的程序从硬盘驱动器磁盘中检索各种变量,以便在程序中使用。我想,在询问细节之前,我应该验证这是可能的。是吗?

如果是,最好的方法是什么?我见过使用.ini文件,但我不知道如何从.ini文件中专门检索数据。是否与您搞砸的文本文件相同,以确保变量始终位于x行?例如:

ifstream variables("variables.ini");

//some code later
//assume line 'x' holds a variable

if(variables.good())
{
   variables.get(x);
}

//or whatever =/

我不知道该怎么做。

编辑:我选择的语言是C ++。

3 个答案:

答案 0 :(得分:1)

您需要解决的第一个问题是谁和原因。您对 的选项将遵循这些选项。

那么谁(或什么)将访问数据?如果它只是程序本身,那么你可以存储你想要的数据 - 二进制文件,xml,数据库,ini文件,等等。但是,如果用户需要轻松访问数据,以便他们可以在运行之前更改它,那么像ini这样可以轻松编辑的文本文件是有意义的。为了编辑以其他格式存储的数据,您可能必须编写一个完全独立的程序来操作存储的参数。也许这在你的情况下是有意义的,也可能不是,但这将是更多的工作。

如果您选择进入ini路线,那么您就在正确的轨道上。它们只是文本文件。常见的格式是包含部分(通常在括号中),然后是部分中的键/值对。通常注释行以分号开头,对于可能想要在设置之间来回切换的用户来说,这是一个很好的触摸。

这样的事情:

[System]
    datapath = /home/me/data

[Application]
    start_count = 12
;   start_count = 20  //this is a comment

您不必担心数据的特定行。您只需逐行阅读文件。空或评论行被抛出。您注意到您所在的部分并处理键/值对。

有很多方法可以将解析后的文件存储在程序中。一个简单的方法可能是将节名称和键连接成地图的键。 (键/值对的值)将是地图的数据。

因此“Systemdatapath”可以是一个映射键,其值为“/ home / me / data”。当您的程序需要使用这些值时,它只需按键查找。

这是基础知识。最终你会想要修饰它。例如,按类型检索值的方法。例如。 getString(),getInteger(),getFloat()等

答案 1 :(得分:0)

您决定应用程序的.ini文件的格式。我通常使用XML,因为你可以按范围组织你的信息,并且已经有一堆lib来处理从XML树中存储和检索信息。

编辑:for C ++ - http://xerces.apache.org/xerces-c/

答案 2 :(得分:0)

如果您要经常从文件中提取值,特别是如果您需要更新(持久化​​)这些值,则数据库是一个很好的选择。随着数据集的增长,它也会为您提供良好的性能。