2011-04-18 81 views
5

我必須使用一個大的CSV文件,最大2GB。更具體地說,我必須將所有這些數據上傳到mySQL數據庫,但在我必須對此進行一些計算之前,所以我需要在MATLAB中完成所有這些工作(也是我的主管希望在MATLAB中完成,因爲他只熟悉MATLAB :()。在MATLAB中使用一個大的CSV文件

任何想法,我該怎麼處理這些大文件?

+0

計算什麼樣的?它是否需要完整文件中的數據,或者是否可以逐行處理? – 2011-04-18 12:43:26

+0

我可以一行一行地處理 – 2011-04-18 12:48:30

+0

對你的文件格式的描述將是最有幫助的。 – gnovice 2011-04-18 14:16:20

回答

9

你應該使用textscan在塊讀取數據,然後程序,這將可能是更有效的比讀一行。同時舉例來說,如果你有3個數據列,你可以這樣做:

filename = 'fname.csv'; 
[fh, errMsg] = fopen(filename, 'rt'); 
if fh == -1, error('couldn''t open file: %s: %s', filename, errMsg); end 
N = 100; % read 100 rows at a time 
while ~feof(fh) 
    c = textscan(fh, '%f %f %f', N, 'Delimiter', ','); 
    doStuff(c); 
end 

編輯

如今(R2014b及更高版本),使用datastore更容易,效率更高。

+1

+1。我能否與您談談在錯誤信息中包含更多細節? IM(NS)HO詳細診斷功能使調試方式更容易,並且是示例代碼讀取器的良好習慣。 'file ='fname.csv'; [fh,errMsg] = fopen(文件,'rt');如果fh == -1;錯誤('無法打開文件%s:%s',文件,errMsg);結束; ... fclose(fh);' – 2011-04-18 15:15:15

0

在處理大型數據集時,在this file exchange item中有很好的建議。

具體議題包括:
*瞭解數組的最大規模和MATLAB
工作區*使用無證功能,向您展示在MATLAB
可用內存*設置在Windows XP下的3GB開關獲得1GB的內存對於MATLAB
*使用textscan閱讀大量文本文件和內存映射功能來讀取大型二進制文件