在C + +中有一种方法去文本文件中的特定行?
如果我用fstream打开一个文本文件,是否有一个简单的方法来跳转到特定的行,如第8行?
在那里循环。
#include <fstream> #include <limits> std::fstream& GotoLine(std::fstream& file, unsigned int num){ file.seekg(std::ios::beg); for(int i=0; i < num - 1; ++i){ file.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); } return file; }
将file
的查找指针设置为行num
的开头。
使用以下内容testing文件:
1 2 3 4 5 6 7 8 9 10
Testprogram:
int main(){ using namespace std; fstream file("bla.txt"); GotoLine(file, 8); string line8; file >> line8; cout << line8; cin.get(); return 0; }
输出: 8
如果每一行都有相同的长度,则可以使用istream :: seekg ()跳转到该位置并从那里读取。
如果这些行的长度相同,这里是一个工作和整洁的例子: std::getline()
#include <iostream> #include <fstream> #include <string> const int LINE = 4; int main() { std::ifstream f("FILE.txt"); std::string s; for (int i = 1; i <= LINE; i++) std::getline(f, s); std::cout << s; return 0; }
一般来说, 不 ,你必须采用类似于Xeo所示的策略。
如果netrom说你知道线条有固定的长度, 是的 。
即使线路长度事先不知道,但(1)你会想要跳过很多,(2)你可以保证没有人搞乱你的文件,同时你可以做一个通过形成一个索引,然后使用它。