在文本文件C ++上返回一行

时间:2014-12-06 11:38:17

标签: c++ file getline

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

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

如果它找到了我正在寻找的东西(标签),它会将该行存储在临时字符串中。我不想继续这个,直到我找到一些其他标签,如果我找到另一个标签,我希望能够返回到前一行,以便程序读取再次作为其他标签,并做其他事情。

我一直在看putback()和unget()我对如何使用它们感到困惑,如果它们可能是正确的答案。

2 个答案:

答案 0 :(得分:9)

最好是考虑一次性算法,该算法在内存中存储第一个标签可能需要的内容而不返回。

如果无法做到这一点,你可以"书签"流位置,稍后通过tellg()seekg()

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

如果您阅读递归嵌入式标签(例如html),您甚至可以使用stack<streampos>在阅读时推送和弹出位置。但是,请注意,此类前向/后向访问会降低性能。

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

答案 1 :(得分:1)

到目前为止最容易的事情是,如果你只想要回退一行,总是要跟踪你之前这一行的行。

维护一个存储当前行的cur变量,以及存储前一行的prev。当您移至下一行时,将cur复制到prev,然后将新行读入cur

这样,您始终可以使用上一行。