2011-04-18 75 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阅读大量文本文件和内存映射功能来读取大型二进制文件