C++ C++;:按行号排队

C++ C++;:按行号排队,c++,getline,C++,Getline,有没有一种通过行号从文本文件中获取行的快速方法?如果我只想要第20行,有没有什么东西可以让我做一些像获取第20行这样的事情?我知道getline(in,line)一次读一行,但我不想为了得到第20行而调用getline 20次 谢谢 不,您必须使用一个循环,该循环将前进到下一行二十次 无法按您的要求执行操作的原因是文件的结构:它是一个字节序列,而新行只是另一个字节(或者根据Windows惯例是两个字节的序列)。不,没有快速而神奇的方法 背景 文本文件记录的长度是可变的。每个文本行的字符数可能不同

有没有一种通过行号从文本文件中获取行的快速方法?如果我只想要第20行,有没有什么东西可以让我做一些像获取第20行这样的事情?我知道getline(in,line)一次读一行,但我不想为了得到第20行而调用getline 20次


谢谢

不,您必须使用一个循环,该循环将前进到下一行二十次


无法按您的要求执行操作的原因是文件的结构:它是一个字节序列,而新行只是另一个字节(或者根据Windows惯例是两个字节的序列)。

不,没有快速而神奇的方法

背景
文本文件记录的长度是可变的。每个文本行的字符数可能不同。固定记录很容易,因为它们的长度是已知的

要查找第n条记录,必须查找文本记录的开头或结尾。这通常通过搜索换行符来执行。还是很乏味

转换为随机访问
如果多次请求数据,记录行号及其位置的地图或字典将非常方便。使用行号,检索文件位置,然后将文件指针设置为给定位置

内存映射文件
如果有足够的内存,可以读取文件并将其存储在内存中

但是,仍然需要搜索换行符并对其进行计数才能找到X行

摘要
没有快速的方法第一次在文件中找到文本行的开头。在任何情况下,都必须在文本中搜索换行符并计算换行符


有一些方法可以加快这个过程,但是这些方法需要读取文件一次或多次。行号到文件位置的映射很快,但需要进行初始扫描。将文件加载到内存(内存映射)需要将文件读入内存(首先读取),然后搜索内存;此外,OS只能加载被请求的文件的部分而不是整个文件。< /P>这是C++还是C问题?你把这个标记为<代码> C<<代码>,并在标题中指定为“代码> C++ +代码>。重复的答案也适用于C++……对不起,我想标记C++,我只是习惯于在C语言中编码,所以我无意中标记它。同样的答案,无论哪种方式,都可以将其设置为字节而不是行。这是一个更好的复制品