C ++:按行号获取行

时间:2014-06-17 00:29:01

标签: c++ getline

是否有快速的方法从行号中获取文本文件中的行?如果我只想要第20行是否有任何东西可以让我做一些像获得第20行的东西?我知道getline(in,line)每次读取一行,但我宁愿不调用getline 20次来获得第20行。

谢谢!

2 个答案:

答案 0 :(得分:1)

不,你必须使用一个循环,它将前进到下一行二十次。

不可能做你想要的是文件结构的方式:它是一个字节序列,一个新行只是另一个字节(或Windows约定的两个字节的序列)。

答案 1 :(得分:1)

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

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

要查找第N 条记录,您必须找到文本记录的开头或结尾。这通常通过搜索换行符来执行。仍然乏味。

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

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

但是,仍然需要搜索新行并计算它们以找到第X行。

<强>摘要
第一次没有快速查找文件中文本行开头的方法。无论如何,必须搜索文本以获取新行并计算新行。

有一些方法可以加快这个过程,但是这些方法涉及一次或多次读取文件。行号到文件位置的映射很快,但需要初始扫描。将文件加载到内存(内存映射)需要将文件读入内存(首先读取)然后搜索内存;此外,操作系统可能只加载请求的文件部分,而不是整个文件。