我试图用 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 上,第 1 列被解释为字符串。在 linux 上它似乎被解释为数字,所以它试图读取数字并在反斜杠处失败。这是我认为至少正在发生的事情。任何帮助将不胜感激。
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
不幸的是,csvread
的the documentation明确指出:
M = csvread(filename)
读取逗号分隔值格式的文件filename
。该文件只能包含数值。
由于/
既不是逗号,也不是数值,因此会产生错误。
您可以使用readtable
,因为它将接受任何输入。
是的 xlsread 需要安装 Microsoft Excel,除非它在“基本”模式下运行,并且“基本”模式仅读取.xls.xlsx 和.xlsm 文件。
另一种选择是在 MATLAB 的文件交换中发布的许多用户编写的函数,这些函数将在 linux 上运行,并且在读取非格式化内容时更加灵活。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(10条)