簡體   English   中英

如何從大文本文件讀取到數組C ++

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

我正在嘗試從具有兩列的超大文本文件中讀取數據,這是一個網絡圖形,類似於:(除了它有4000萬行)。

1 2

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到的特定行。
如果要對文件執行計算,也許可以隨時進行處理,也可以分塊進行處理。

是的,您肯定會以緩慢(但很漂亮)的方式進行操作。 您有2個選擇可以更快:

如果(您有足夠的內存){ 將整個文件讀入內存, 然后解析該文件 }

否則{ 一次將文件的大塊讀入內存, 然后解析文件 }

無論哪種方式,加載看起來都是這樣的...

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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM