我使用文本文件作为数据库来保存我使用 swi-prolog 制作的游戏的用户信息。信息是这样保存的:user(Name,Password,Age,Points).
我想做的是更改用户的 Points
而不必重写整个数据库.换句话说,我正在寻找可以像 retractall(user(Name,_,_,_))
一样工作的东西,但使用的是文本文件。我知道如何使用 read/2 找到特定用户,以及如何使用 write/2 断言一个新事实,但我不知道如何删除文本文件中的特定行。
感谢您的帮助。
最佳答案
看看 SWI-Prolog 的库(持久性)。它通过添加事实已删除的行来删除事实。如果文件因添加/删除行而变得太大,它会提供 db_sync/1 来写入一个干净的文件。操作系统文件系统操作不允许删除文件的一部分(截断结尾除外)。执行此操作的正常方法是写入一个新文件,如果成功,则将其重命名为现有文件,这样即使在写入新文件时崩溃也不会丢失任何内容。
关于database - 使用 swi-prolog 更改和删除文本文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088686/