0
我必須讀取和處理50 GB的文件,並且想要按塊執行塊大小爲5 GB的緩衝區大小。問題是每行都有不同的格式和不同數量的參數。一個示例代碼段:帶來n行文件到內存緩衝區
4 A 5 7
1 2 B 7 9 10
1 3 B 14 755 9874
5 A 2 7
...
所以,不能做直接fread(. . .)
給讀取大小= 5GB,因爲這將可能最終在多個之間。所以,我想讀取從文件緩衝的最大行數,但結尾爲'\n'
。
一個可能的解決方案可能是在第一次讀取時讀取小於5 GB的1000個字節,並繼續迭代以讀取文件,將seek設置爲文件開始,每次增加一個字節,直到最後一個讀取字節爲' \ N」。但是這個解決方案需要更多的讀取,所以想知道是否有一些更優化的解決方案?
編輯:
我用這個簡單的代碼:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE* fp = fopen("outit", "r");
char *s = new char[1000];
fread(s,1,1000,fp);
cout<<s;
}
一個小樣本文件只有幾行:
this is a line
this is another line
again another one
more another
但儘管如此,輸出爲:
this is a line
this is another line
again another one
more anotheram Files (x86)\CodeBlocks\MinGW\bin;C
:\WINDOWS\system32;C:\WINDO WS;C:\WINDOW
S\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Progr am Files\Microsoft SQL Server\110\Tools\Binn\;D:\Program Files\MATLAB\R2012b\run time\win64;D:\Program Files\MATLAB\R2012b\bin;C:\Program Files (x86)\Microsoft A SP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows P erformance Toolkit\;C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.4\
什麼和爲什麼垃圾價值?
對於確切的問題更新問題面臨 –
@BitManipulator我更新了我的答案,你也值得商榷。不要改變這樣的問題,它會使答案無效。只需添加新的信息。希望有所幫助。 – jrok