2009-07-07 36 views
0

基本上,我想让我的程序从硬盘中检索各种变量以便在程序中使用。我想,在询问细节之前,我应该证实这甚至是可能的。是吗?如何将变量排除在持久数据之外?

如果是,那么最好的方法是什么?我见过使用.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++。

回答

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()等

+0

太棒了,正是我需要知道的。如果仅仅是为了简单起见,我想我会继续使用.ini。我只是想确保只要我按照自己的方式解析并按照自己的方式访问它,如果存在某种约定(或其他),则无关紧要。 +1和选定的答案 – jkeys 2009-07-07 04:33:55

0

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

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

0

如果你打算从文件频繁拉动价值,特别是如果你需要更新(坚持),这些值,数据库是一个很好的选择。随着数据集的增长,它也会带给你良好的性能。