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

Posted

技术标签:

【中文标题】您如何将变量分配给持久数据?【英文标题】:How do you farm out variables to persistent data? 【发布时间】:2009-07-07 02:16:45 【问题描述】:

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

如果是,最好的方法是什么?我见过 .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()等

【讨论】:

太好了,正是我需要知道的。我想我会用.ini 保存它,如果只是为了简单起见。我只是想确保只要我以我的方式解析它并以我的方式访问它,是否有一个约定(或其他)都没有关系。 +1 和选定的答案【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于您如何将变量分配给持久数据?的主要内容,如果未能解决你的问题,请参考以下文章

将oracle日期分配给SSIS变量

核心数据 - 如何将核心数据中的属性值分配给变量

如何将 iPython 分析器 %%prun -r 的结果分配给变量?

将字符串中的值分配给变量数组

如何将 Cloud Firestore 中的数据分配给 Android 的全局变量 [重复]

如何在函数内将变量分配给合并的 Pandas 数据框