如何从一个大型文本文件读取到一个数组c++

how to read from a large text file to an array c++

本文关键字:一个 读取 数组 c++ 文件 文本 大型      更新时间:2023-10-16

我试图从一个有两列的非常大的文本文件中读取,它是一个网络图,类似于这样:(除了它有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];
}
相关文章: