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

Posted

技术标签:

【中文标题】在文本文件 C++ 上返回一行【英文标题】:Go back one line on a text file C++ 【发布时间】:2015-02-04 12:44:55 【问题描述】:

我的程序使用 :

从文本文件中读取一行
std::ifstream myReadFile("route.txt");
getline(myReadFile, line)

如果它找到了我正在寻找的东西(标记),它就会将该行存储在一个临时字符串中。在找到其他标签之前,我不会继续此操作,如果我找到其他标签,我希望能够返回到上一行,以便程序再次读取 if 作为其他标签并执行其他操作。

我一直在研究 putback() 和 unget() 我对如何使用它们以及它们是否可能是正确答案感到困惑。

【问题讨论】:

我认为std::istream::seekg 与您刚刚阅读的行的长度相一致可能会有所帮助。 【参考方案1】:

最好考虑一个单程算法,它将在第一个标签处可能需要的内容存储在内存中而无需返回。

如果无法做到这一点,您可以为流位置“添加书签”,稍后使用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

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

【讨论】:

以上是关于在文本文件 C++ 上返回一行的主要内容,如果未能解决你的问题,请参考以下文章

如何通过powershell将每一行文本文件保存为数组

QT中怎样读取中文文本文件!

delphi写多行文本文件操作

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

关于C语言中文本文件的逐行读取的实现

VB关于搜索文本的代码···