2013-03-02 108 views
0

作为我的任务的一部分,我必须读取一个.csv文件。该文件在列下包含文本,数字数据和缺失数据的混合: 编号,标题,说明(> 100个字,可变长度),位置,时间,期限,公司,类别,来源。将.csv文件读入MATLAB

有超过50万行。

建议我一个命令将这个文件读入MATLAB。

我已经试过如下:

uiopen('filename.csv',1) 

它提供了错误:使用textscan阅读更多复杂的格式。然后我试着:

data =textscan('filename.csv','%f %s %s %s %s %s %s %s %s %f','HeaderLines', 1, 'Delimiter', ','); 

该命令运行完成,但它只给出一个数组(1X10)的单元格(它是空的)。因此,我没有得到我想要的。

我也试过textread命令,但它给出了错误。

回答

4

textscan是你想使用的,但根据textscan的matlab文档页面,第一个参数应该是一个文件ID。现在你正在传递一个字符串。

+0

嗨mfbutner。我试着把文件ID也放在一起,但我遇到了同样的问题。 – 2013-03-04 17:04:11

+0

因此,您的代码现在看起来像 f = fopen('filename.csv');数据= textscan(f,'%f%s%s%s%s%s%s%s%s%f','HeaderLines',1,'Delimiter',','); – mfbutner 2013-03-04 17:15:04

1

您可能需要使用readtable尝试:

t = readtable('filename.csv'); 

这将在Matlab中创建一个表,它可以包含字符串和数字数据。

或者,您可以使用导入工具(从Matlab的UI导入数据按钮访问),或者你可以使用uiimport打开它:

uiimport('filename.csv') 

这将为你的数据的图形演示,并且可以为您生成代码以进行导入。

使用textscan可能会遇到的困难是您需要正确获取格式(%f,%s等),并且其中的任何变化都可能导致失败。例如,如果由于某些缺失/错误数据而在数字字段中包含字符串,则可能会失败。如果您选择使用textscan并且没有获得您期望的结果,您可能需要尝试使用所有'%s'格式规范。

textscan(f,'%s %s %s %s %s %s %s %s %s %s','HeaderLines', 1, 'Delimiter', ',');