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

Go back one line on a text file C++

本文关键字:一行 返回 文本 文件 C++      更新时间:2023-10-16

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

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>来推送和弹出位置。但是,请注意,此类向前/向后访问会降低性能。

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

到目前为止,如果您只想回滚一行,最简单的事情就是始终跟踪您所在的行之前的行。

维护一个存储当前行的cur变量和存储前一行的prev变量。当您移动到下一行时,您将cur复制到 prev 中,并将新行读入cur 中。

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