【发布时间】:2015-01-03 07:21:00
【问题描述】:
我需要找到一种从文件中读取最后 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 个数字,但是它们是倒数的,我需要一种方法来反转它们并消除它打印出来的空白。
我不确定如何使用 reverse 以及需要哪些参数 - 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 个数字来反转文本文件,这是我需要的唯一信息。
问候
【问题讨论】:
-
按顺序读取行,并按顺序将它们添加到向量中,以相反的顺序打印它们。请记住,您可以从头到尾以及从尾到头对向量进行迭代。
-
@JoachimPileborg 这行得通,但我也想知道是否有更直接的方法可以使用 fstream 库来做到这一点。我知道一种方法是直接操作文件指针,但这不是很优雅。考虑当你有一个大文件(几个演出)。存储整个文件将完全浪费内存。
-
我会试一试并发布它是否有效,谢谢
-
另外,如果你需要使用反转矢量而不是仅仅打印它,那么it's very easy to reverse it。
-
@1110101001 您无法以简单的方式可靠地反向读取文本文件。然后你必须逐个字符地读取,处理换行符,附加到字符串并附加到集合中。从头读取,反转向量并打印向量是四行 C++ 代码(不包括声明)。