在MATLAB中从CSV文件中读取文本数据

时间:2011-07-20 09:22:21

标签: matlab file-io csv data-import

我的数据如下:

days of week      date        time(hrs)        visitors
mon            jan 2 2010     900               501 
mon            jan 2 2010    1000               449
mon            jan 2 2010    1100               612

同样适用于全年的每一天。 我需要创建一个星期几的矩阵,如下所示:

A=[
    mon
    mon
    mon
]

5 个答案:

答案 0 :(得分:1)

以下是我将如何阅读制表符分隔值并解析日期:

%# read and parse file
fid = fopen('data.csv','rt');
C = textscan(fid, '%s %s %s %d', 'Delimiter','\t', 'HeaderLines',1, ...
    'MultipleDelimsAsOne',true, 'CollectOutput',false);
fclose(fid);

%# get date and number of visitors
dt = datenum(strcat(C{2}, {' '}, C{3}), 'mmm dd yyyy HHMM');
visitors = C{4};

%# plot
plot(dt,visitors)
datetick('x')
xlabel('time of day'), ylabel('visitors')

enter image description here

至于星期几列,您可以将其命名为:

>> C{1}                        %# first column from file
ans = 
    'mon'
    'mon'
    'mon'

>> cellstr(datestr(dt,'ddd'))  %# actual day of week from parsed dates
ans = 
    'Sat'
    'Sat'
    'Sat'

这会产生不同的日子(您的数据发布只是简单的,或者您在生成这些日期的部分中有错误!)

答案 1 :(得分:0)

this previous question获取提示,

fid = fopen('filename.txt');
% Skip a line for the header
s = fgetl(fid);
% Read the rest into data
data = textscan(fid, '%s %s %d %d %d %d');
% Close the file
fclose(fid);

一周中的几天是data的第一个单元格。

答案 2 :(得分:0)

您可以从文件交换中心下载我的csvimport提交内容。假设您的数据是制表符分隔的,您可以使用以下方式阅读:

[days datecol timecol visitors] = csvimport( 'file.txt', 'delimiter', '\t', ...
       'columns', {'days of week', 'date', 'time(hrs)', 'visitors'} );

前两个输出参数是字符串的单元格数组,而后两个输出参数是双矩阵。

答案 3 :(得分:0)

如果您刚开始使用(最新版本的)matlab,最简单的方法是使用'导入向导'。

一些简单的步骤:

  1. 浏览到您的文件并右键单击
  2. 选择导入选项
  3. 选择将事物存储为cell array的选项(矢量或矩阵不起作用)。
  4. 点击导入
  5. 您可以选择单击导入旁边的,然后选择要为此过程生成代码。但是,这可能有点冗长。如果你只需要做一次,我会推荐这种方法。

答案 4 :(得分:-1)

您可以尝试使用dlmread。它可以采用任何ASCII分隔符。我认为它可能符合您的要求。请参阅here