我需要找到一种从文件中读取最后6行数据的方法。
例如,如果我有
1个
2
3
4
5
6
7
8
9
10
我需要阅读才能获得
10、9、8、7、6、5、4。
然后需要将它们放入变量或字符串中,以便以后输出。目前,我已经设法读取文件的最后一行,但是我不知道如何读取其他5个数字。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
std::ifstream in("test.txt");
if (in.is_open())
{
std::vector<std::string> lines_in_reverse;
std::string line, line2;
while (std::getline(in, line))
{
// Store the lines in reverse order.
lines_in_reverse.insert(lines_in_reverse.begin(), line);
}
cout << line << endl;
while (std::getline(in, line2))
{
// Store the lines in reverse order.
lines_in_reverse.insert(lines_in_reverse.begin(), line2);
}
cout << line2 << endl;
}
cin.get();
return 0;
}
谁能建议一种解决方法?我不知道可以提供帮助的任何功能或方法。
编辑
此方法从文件输出最后6个数字,但是它们是向后的,我需要一种方法来反转它们并摆脱打印出来的空白。
我不确定如何使用反向以及对此需要哪些参数-http://en.cppreference.com/w/cpp/algorithm/reverse
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
char x;
ifstream f("test.txt", ios::ate);
streampos size = f.tellg();
for (int var = 1; var <= size; var++){
f.seekg(-var, ios::end);
f.get(x);
reverse(x);
cout << x;
}
cin.get();
return 0;
}
很多答复显示了如何使用向量而不是最后6个数字来反转文本文件,这是我唯一需要的信息。
问候
最佳答案
存储您阅读的所有行不是一个好主意,因为可能会有例如十亿行。
您只需要存储最后的6。
下面的代码旨在按相反的顺序生成这些行,因为问题表明这是必需的:
#include <iostream>
#include <string>
#include <deque>
using namespace std;
auto main() -> int
{
string line;
deque<string> last_lines;
while( getline( cin, line ) )
{
if( last_lines.size() == 6 )
{
last_lines.pop_back();
}
last_lines.push_front( line );
}
for( auto const& s : last_lines )
{
cout << s << endl;
}
}
这里的输出不完全是问题的示例
” 10、9、8、7、6、5、4
因为那是7行,与第一句中提到的6行相反。
关于c++ - 以相反的顺序从文本文件中读取行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27752672/