我的程序使用以下方法从文本文件中读取一行:
std::ifstream myReadFile("route.txt");
getline(myReadFile, line)
如果发现我正在寻找的某些内容(标签),则将该行存储在临时字符串中。我想继续这样做,直到找到其他标签,如果我找到另一个标签,我希望能够返回到先前的那一行,以便程序再次读取它并执行其他操作。
我一直在研究putback()和unget(),不确定如何使用它们以及它们是否是正确的答案。
最好考虑使用一遍算法,在第一个标记需要时将可能需要的内容存储在内存中,而不返回。
如果这不可行,您可以使用“书签”流位置,并使用tellg()
和seekg()
稍后检索:
streampos oldpos = myReadFile.tellg(); // stores the position
....
myReadFile.seekg (oldpos); // get back to the position
如果您递归地阅读嵌套的标签(例如HTML),您甚至可以使用stack<streampos>
来在阅读时推入和弹出位置。但请注意,这样的前向/后向访问会降低性能。
如果你只需要回滚一行,最简单的方法就是始终跟踪当前行和上一行。
维护一个名为cur
的变量来存储当前行,以及一个名为prev
的变量来存储前一行。当你移动到下一行时,将cur
复制到prev
,并将新行读入cur
。
这样,你总是可以使用前一行。
std::istream::seekg
可能会有所帮助。 - WhozCraig