如何使用文本文件作为本地数据库

时间:2015-04-19 22:18:01

标签: c++

我有一个带有下一个结构的data_base.txt文件:

1|client_name|id_client|account_client|balance|status
2|client_name|id_client|account_client|balance|status

示例:

1|John Doe|08913835P|053-323-192|120.00|active

现在我想让接下来的四个函数使用这个文件:

此功能会将新客户端添加到.txt文件

int newClient(string client_name, string id_client)
{
  .....
}

此功能将通过选中id_client

来检查客户端是否存在
int checkClient(string id_client)
{
  // return true; (if client with that ID exists)
  // return false; (if client not exists)
}

此功能将获得特定值:

int getData(string field, string id_client)
{
 // Example: if string field == 'balance' and id_client == '08913835P' then return '120.00'
 // This example is done using above example data structure.
}

此功能将修改数据

int modifyData(string field, string data)
{
 // This should work like the previous function but this function will edit specific values.
}

就是这样,我一直在谷歌搜索几个小时,我还想不出怎么做。

1 个答案:

答案 0 :(得分:0)

如果做得不对,这是有问题的,而且非常低效。

简短的回答是,如果每行的长度可以改变,那么您需要完全重写整个文件以更新数据。例如,如果您的程序将整个文件加载到内存中,然后在修改后将其保存,那么这将起作用。

要更新磁盘上的文件,您必须强加某种类型的规则,例如每行必须具有相同的长度。这意味着为所有字段设置最大长度,并用空格或其他字符填充这些字段。

使用后一种技术,应该可以构造一个新的数据行(带填充),知道文件中该行的位置(行号 - 每行长度的1倍),跳转到该位置然后写下这一行。

获取数据会更简单但相似。只需确定线的偏移量并读取它(你知道线的长度)。在呈现给用户之前剥去任何填充。

修改一行与获取数据和写入数据的组合类似。您只需更新两者之间的数据。