19

我正在尝试使用 MATLAB 读取 .csv 文件。这是我的代码:

csvread('out2.csv')

这就是 out2.csv 的样子:

03/09/2013 23:55:12,129.32,129.33
03/09/2013 23:55:52,129.32,129.33
03/09/2013 23:56:02,129.32,129.33

在 Windows 上,我可以使用 xlsread 函数毫无问题地读取这个完全相同的文件。我目前在一台linux机器上。当我第一次使用 xlsread 读取文件时,我被告知“文件不是可识别的格式”,所以我改用 csvread。但是,使用 csvread,我收到以下错误消息:

Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 2u) ==> /09/2013
23:55:12,129.32,129.33\n

Error in csvread (line 48)
m=dlmread(filename, ',', r, c)

我认为日期中的“/”是导致问题的原因。在 Windows 上,第一列被解释为字符串。在 linux 上,它似乎被解释为一个数字,因此它尝试读取该数字并在反斜杠处失败。这是我认为至少正在发生的事情。任何帮助将非常感激。

4

4 回答 4

31

csvread只能读取双打,所以它在日期字段上窒息。使用textscan.

fid = fopen('out2.csv');
out = textscan(fid,'%s%f%f','delimiter',',');
fclose(fid);

date = datevec(out{1});
col1 = out{2};
col2 = out{3};

更新(2017 年 8 月 31 日)

由于这是在 2013 年写回的,MATLAB 的textscan函数已更新为直接读取日期和时间。现在代码看起来像这样:

fid = fopen('out2.csv');
out = textscan(fid, '%{MM/dd/uu HH:mm:ss}D%f%f', 'delimiter', ',');
fclose(fid)

[date, col1, col2] = deal(out{:});

下面@Victor Hugo 提到的另一种选择(目前我个人针对这种情况的首选方法)是使用readtable它将接受相同的格式字符串,textscan但将结果直接组合到一个表对象中:

dataTable = readtable('out2.csv', 'Format', '%{MM/dd/uu HH:mm:ss}D%f%f')
dataTable.Properties.VariableNames = {'date', 'col1', 'col2'};

dataTable =

  3×3 table

           date             col1      col2 
    ___________________    ______    ______

    03/09/2013 23:55:12    129.32    129.33
    03/09/2013 23:55:52    129.32    129.33
    03/09/2013 23:56:02    129.32    129.33
于 2013-10-27T00:11:54.650 回答
6

不幸的是,文档明确csvread指出:

M = csvread(filename)读取逗号分隔值格式的文件,filename. 该文件只能包含数值。

由于/既不是逗号也不是数值,因此会产生错误。

于 2013-10-27T00:08:22.487 回答
2

您可以使用readtable,因为它会接受任何输入。

https://www.mathworks.com/help/matlab/ref/readtable.html

于 2016-10-24T13:43:44.590 回答
0

是的,xlsread 需要安装 Microsoft Excel,除非它在“基本”模式下运行,而“基本”模式仅读取 .xls .xlsx 和 .xlsm 文件。

另一种选择是发布在 MATLAB 文件交换器上的一些用户编写的函数,这些函数可以在 linux 上运行,并且在读取非格式化内容时更加灵活。

一个例子: https ://www.mathworks.com/matlabcentral/fileexchange/75219-csv2cellfast-import-csv-files-on-machines-without-excel

于 2020-04-27T05:32:44.680 回答