[英]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.