在C语言中,从文本文件中读取特定行而不读取整个文件

在C语言中,从文本文件中读取特定行而不读取整个文件,c,C,我想从文本文件中读取特定行,而不是逐行读取整个文件。例如,如果我在一个文本文件中有10行,并且我必须读第6行,那么我不会读前5行,而是直接读第6行。有人能帮我吗?这个问题已经回答了 引用上面的话, 除非您对该文件有更多了解,否则无法随机访问特定行。新行由行尾字符分隔,通常可以出现在任何地方。文本文件中没有允许您跳到第n行的映射或索引 如果您知道,比如说,文件中的每一行都是相同的长度,那么您可以使用随机访问跳转到特定的行。如果没有这方面的额外知识,您就别无选择,只能遍历整个文件,直到达到所需的行

我想从文本文件中读取特定行,而不是逐行读取整个文件。例如,如果我在一个文本文件中有10行,并且我必须读第6行,那么我不会读前5行,而是直接读第6行。有人能帮我吗?

这个问题已经回答了

引用上面的话,

除非您对该文件有更多了解,否则无法随机访问特定行。新行由行尾字符分隔,通常可以出现在任何地方。文本文件中没有允许您跳到第n行的映射或索引

如果您知道,比如说,文件中的每一行都是相同的长度,那么您可以使用随机访问跳转到特定的行。如果没有这方面的额外知识,您就别无选择,只能遍历整个文件,直到达到所需的行


学分:引用的答案是

你可以“索引”该文件。请注意,只有当您的文本文件:

  • 很大
  • 经常读,很少写
最简单(可能也是最有效)的方法是使用数据库引擎。只需将文件存储在一个表中,每行一行

或者,您可以创建自己的索引机制。基本上,这意味着:

  • 创建新文件(索引)
  • 扫描整个文本文件一次,将每行的偏移量存储在索引文件中
  • 每次文本文件更改时,重复上述步骤
在文本文件中查找行n需要两次查找:

  • 读取索引的第n个偏移量
  • 从文本文件中读取一行,从索引中找到的偏移量开始

  • 如果行的长度不固定,这是不可能的(如果文件不存在索引)。实际上没有办法做到这一点,因为在普通文本文件中,您无法说出行在文件中的哪个位置开始。您只需循环并读取(并丢弃)所需行之前的所有行。如果“行”具有固定长度,您可以使用
    fseek
    。否则,就没有办法做到这一点。