【问题标题】:Reading a value from file in C [closed]从C中的文件中读取一个值[关闭]
【发布时间】:2014-10-17 03:36:15
【问题描述】:

我希望比较二进制文件中特定位置的值(例如,索引 n x i 中的值,其中 i = 0,1,2,3... 并且 n = 任何数字,例如 10)。 我想看看该值是否等于另一个值,例如“m”。该值在文件中的位置始终仅在 n x i 中。

我可以想到三种方法:

  1. 我维护了一个存储 n x i 值的临时变量,我直接使用 fseek 转到该索引并查看它是否等于 m。

  2. 我对文件中 m 的值进行 fseek。

  3. 我使用 fseek 在位置 0、n、2n、3n 等中搜索 m 的值。

我不知道这些操作中的每一个是如何工作的,但是就所占用的空间和时间而言,其中哪一个是最有效的?

编辑: 这个过程是一个更大的过程的一部分,它有更多的文件,因此时间很重要。 如果除了使用 fseek 还有其他方法,请告诉。

任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 不清楚您要做什么以及数据的格式。这是某种搜索吗?
  • 是的。我有一个名为 minkey 的值,我想在文件中搜索具有该值的位置并从中读取接下来的 4 个值。
  • 顺便问一下,为什么我的帖子被否决了?我没有太多使用此网站的经验,所以请告诉我,以便我在问其他问题时可以处理它。
  • 我不知道为什么这被否决了。也许是因为不清楚您要做什么。

标签: c binaryfiles fseek


【解决方案1】:

如果您事先不知道您正在搜索的文件中的值和顺序,最快的方法就是线性浏览文件并比较值。

这可能最好通过重复使用 fseek() 来完成,但重复调用 fseek 和 read 可能比仅读取大块文件并在内存中查看它们要慢 - 因为系统调用有很多开销。

但是,如果您对相同的文件进行大量搜索,则最好建立索引和/或对记录进行排序。一种方法是将数据放入具有内置索引的关系数据库(几乎所有 SQL 数据库)

编辑:

既然您知道您的文件已排序,您可以使用binary search

【讨论】:

  • 我忘了补充我要搜索的二进制文件已经排序了。
猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多