繁体   English   中英

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

[英]How do i start reading a text file from a specific point?

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

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

你不能。 您需要阅读前 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 Internals 7 书(应该是第 2 部分,第 11 章)以详细了解它。

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

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

如果您正在编写联系人应用程序,则不应使用常规文本文件,除非:

  1. 您填充行长度,以便您可以轻松计算每行的 position。
  2. 您正在将整个文件加载到 memory。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM