【问题标题】:Best way to read text file without hogging memory在不占用内存的情况下读取文本文件的最佳方法
【发布时间】:2012-09-01 19:17:29
【问题描述】:

阅读文本文件的最佳方法是什么,例如,我有一个包含数百本书的文本文件。在这些书籍下将是作者等一些作者可以拥有多本书。

我将如何编写这个程序,以便在搜索或查找一条信息时不会将整个文件读入内存(数组、向量等)。假设我输入作者姓名,它会找到他们写的每一本书。所以我很好奇做到这一点的最佳方式和最有效的方式。

我会用 C++ 编写代码

【问题讨论】:

  • 如果您要搜索所有作者书籍,则无论如何都必须加载整个文件(作为最坏的情况)
  • 在需要数据库时不要使用文本文件。您也可以在 C++ 中使用它们,它不需要 Java。以 sqlite 为例。

标签: c++ arrays memory-management vector


【解决方案1】:

基本答案是 FileStream。因此,您在磁盘上的文件中寻找一个位置,然后从那里读取。但是,此时您将非常受磁盘 io 限制,并且您的文件必须符合某种结构,除非您每次想要查找某些内容时都必须从头读取到目标。即它必须按作者顺序排列,即使可以接受,这也可能意味着通过它搜索其他任何东西都会非常低效。

解决问题的经典方法是索引文件。 因此,books.dat 将是一个相关的 authors.idx,它可以说是作者和标题的列表,最好按作者排序。 然后你有titles.idx,它是标题和书在books.dat中开始的位置。 文件中的下一个标题将为您提供书籍的长度。

当然,您必须维护这两个文件。如果应用程序不编辑文件,那么使用 uo 工具来创建您需要的索引将是一个不错的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多