在C++中,回到文本文件的上一行

10

我的程序使用以下方法从文本文件中读取一行:

std::ifstream myReadFile("route.txt");
getline(myReadFile, line)

如果发现我正在寻找的某些内容(标签),则将该行存储在临时字符串中。我想继续这样做,直到找到其他标签,如果我找到另一个标签,我希望能够返回到先前的那一行,以便程序再次读取它并执行其他操作。

我一直在研究putback()和unget(),不确定如何使用它们以及它们是否是正确的答案。


1
我认为结合刚刚读取的行的长度,std::istream::seekg 可能会有所帮助。 - WhozCraig
2个回答

18

最好考虑使用一遍算法,在第一个标记需要时将可能需要的内容存储在内存中,而不返回。

如果这不可行,您可以使用“书签”流位置,并使用tellg()seekg()稍后检索:

streampos oldpos = myReadFile.tellg();  // stores the position
....
myReadFile.seekg (oldpos);   // get back to the position

如果您递归地阅读嵌套的标签(例如HTML),您甚至可以使用stack<streampos>来在阅读时推入和弹出位置。但请注意,这样的前向/后向访问会降低性能。

您提到了putback()unget(),但这些函数仅限于一个字符,并且似乎不适用于您的getline()方法。


2

如果你只需要回滚一行,最简单的方法就是始终跟踪当前行和上一行。

维护一个名为cur的变量来存储当前行,以及一个名为prev的变量来存储前一行。当你移动到下一行时,将cur复制到prev,并将新行读入cur

这样,你总是可以使用前一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接