如何从一个大型文本文件读取到一个数组c++
how to read from a large text file to an array c++
我试图从一个有两列的非常大的文本文件中读取,它是一个网络图,类似于这样:(除了它有4000万行)。
12
1 3
2 1…
所以我想从txt文件读取到myArray[mysize][2],我使用了代码:
ifstream file("web-graph.txt");
if(file.is_open())
{
for(int i = 0; i < mysize; i++)
{
file >> myArray[i][0];
file >> myArray[i][1];
}
}
问题是读取这么大的文件需要很长时间。那么,有没有其他方法可以不花这么多时间从文件中读取呢?
是的,可能会进行分析,但您不会喜欢这个答案。如果你把文件调小,读起来可能会更快。怎样将其保存为二进制文件,而不是文本文件。请注意,这将使您无法使用高级流媒体运营商。你将不得不使用较低级别的东西,这可能会让你更快。
如果你问自己为什么要把整个文件读入内存,那可能会更好。同样,如果您将文件设置为二进制文件,则可以将seek
设置为要查找的特定行。
如果你正在对文件进行计算,也许你可以边处理边处理,或者分块处理。
是的,你肯定是在以缓慢(但漂亮)的方式来做这件事。你有两个更快的选择:
如果(你有足够的内存){将整个文件读取到内存中,然后分析文件}
其他{一次将文件的大块读取到内存中,然后解析文件}
不管怎样,装载看起来像这样。。。
std::ifstream is(filename);
is.seekg(0, std::ios::end);
auto length = is.tellg();
std::string buffer;
if(length > 0)
{
buffer.resize(static_cast<std::string::size_type>(length));
is.seekg(0);
is.read(&buffer.front(), length);
}
然后你会把它放在字符串中。。。
std::stringstream ss(buffer);
并解析它,可能正是你以前的做法。。。
for(int i = 0; i < mysize; i++)
{
ss >> myArray[i][0];
ss >> myArray[i][1];
}
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- C++试图读取一个文件并输出到另一个文本文件
- 全局变量 多读取器 一个写入器多线程安全?
- 如何使用C++读取另一个程序中的源代码输出
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 先进先出:一个进程永远不会从管道读取
- 如何仅读取文本文件中的第一个值
- 编写一个读取五个整数并执行一些任务的C++程序
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- 对于 ~95% 写入/5% 读取线程安全的无序列图,有没有一个简单的解决方案?
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 尝试创建一个读取数组并打印质数的程序
- C++,构造一个读取两个实数和一个字符的程序
- 创建一个读取的程序计算C 文件中的行数
- C++,计算正数和负数并计算数字的平均值)编写一个读取未指定数量的整数的程序
- 如何创建一个读取多个文件的函数