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

C++ 如何使用文本文件作为本地数据库,c++,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 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\u client来检查客户端是否存在

此函数将获得一个特定值:

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倍,跳转到该位置,然后写入该行

获取数据会更简单,但类似。只要确定线的偏移量并阅读它,你就会知道线有多长。在呈现给用户之前,去除任何填充物


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

如果数据长度不是固定的,那么正如@Beta提到的,这是最难的,您可能最终使用了一个db,因为您无法附加到数据的中间file@Sleiman我不想使用任何数据库。。你认为我可以用XML来做这个例子吗?谢谢。更新条目最简单的方法可能是在读取当前文件时将修改写入新文件,如果更新成功,则将新文件与当前文件交换。否则,您要么最终得到效率极低的东西,要么最终使用索引文件和元数据重新实现一个适当的数据库。
int modifyData(string field, string data)
{
 // This should work like the previous function but this function will edit specific values.
}