如何从特定点开始读取文本文件?



所以我的问题基本上是,我如何从特定的行开始读取文件,例如第14行直到第18行?

我在一个简单的联系人列表应用程序工作,唯一缺少的是从一个特定的名称删除信息。用户可以创建一个新的联系人,其中包含姓名、号码和地址作为信息。我希望用户也能够通过输入他们的名字来删除那个人的数据。然后,程序应该读取名称和其下的所有4行,并将它们从文本文件中删除。我怎样才能做到这一点呢?

您可以跳转到文件中的任何偏移量。但是,除非您知道每一行的长度,否则无法知道特定行从哪里开始。

如果你正在编写一个联系人应用程序,你不应该使用常规的文本文件,除非:

  1. 您可以填充行长度,以便您可以轻松计算每行的位置。
  2. 你正在将整个文件加载到内存中。

你不能。你需要读前n行来找出哪一行有哪个数字。除非你的记录每行有固定的长度(这不是一个好主意——你总能想到一个更长的名字)。

同样,不能从文本文件中删除一行。磁盘上的空间不会自己移动。您需要一个实现安全保存和重新排列数据的算法:

foreach line in input_file:
if line is needed:
write line to temporary_output_file
else:
ignore (don't write = delete)
delete input_file
move temporary_output_file to input_file

缺点:当input_file和temporary_output_file同时存在时,您需要大约两倍的磁盘空间。

通过安全保存,NTFS文件系统驱动程序将给被移动的文件提供与删除文件之前相同的时间戳。阅读Windows内部7书来详细了解它。在Windows内部组件6,第2部分中,第12章("文件系统"),第452页的"隧道"子章。

根据联系人列表的大小(可能小于10M条目),将整个数据库加载到内存中,删除记录然后将所有内容写回来是没有问题的。

最新更新