在文本文件 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++ 上返回一行的主要内容,如果未能解决你的问题,请参考以下文章