我正在使用文本文件来存储我的数据记录。 数据以下列格式存储。
安东尼| 9876543210 阿扎尔| 9753186420 布兰达| 1234567890 大卫| 1357924680 约翰| 6767676767
成千上万的记录存储在该文件中。 我想删除一个特定的记录,比如“David | 1357924680”。 我正在使用C,如何有效地删除特定记录? 目前我正在使用临时文件通过省略我想要删除的记录将记录复制到该临时文件。 复制到临时文件后,我通过截断原始文件的所有内容将临时文件的内容复制到原始文件。 我不认为我这样做有效。 帮我。
在数据中添加一列,表明它是有效(1)或删除(0)行:
Antony|9876543210|1 Azar|9753186420|1 Branda|1234567890|1 David|1357924680|1 John|6767676767|1
如果要删除记录,请覆盖单个字节:
Antony|9876543210|1 Azar|9753186420|1 Branda|1234567890|0 David|1357924680|1 John|6767676767|1
布兰达现已删除。
然后添加一个数据文件压缩函数,该函数可用于重写除已删除行之外的文件。 这可以在低使用或无使用期间完成,因此它不会干扰常规操作。
编辑
有效性列可能应该是第一列,因此您可以更轻松地跳过已删除的行。
我认为你的方法有点不对劲。 如果你真的想有效地使用数据库,例如sqlite。 它是一个简单的文件中使用简单的数据库。 但它提供了很多sql的强大function,效率很高。 所以添加新条目和删除不会是一个问题(也很容易搜索)。 请查看: http : //www.sqlite.org/ 。 这是一个3分钟的教程,将通过示例解释如何完成您要在这里完成的所有事情: http : //www.sqlite.org/quickstart.html 。
一些提高效率的简单想法:
我会说一个类似的解决方案,“罗伯特S.巴恩斯”给出了。
我将David|1357924680
修改为|---------------
(等量字节)。
稍后(每天,每周,……)做与现在相同/相似的事情。
三点建议:
1.按照您描述的方式执行,但不是将临时文件复制回原始文件,只需删除原始文件并重命名临时文件即可。 这应该快两倍。
2.使用’XXXXXXX’或其他任何内容覆盖记录。 这非常快,但可能不适合您的项目。
3.使用平衡二叉树。 这是’专业’的解决方案。 如果可能,请避免从头开始编程!
由于无法直接编辑文件,因此您必须使用类似于现在的方法。
正如其他人所提到的那样,保持适当的数据结构并且只是间隔回写会提高效率。
以上就是c/c++开发分享从文件中删除记录?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544731.html