如何将多个文件连接成一个矩阵进行绘图

时间:2013-01-24 02:15:17

标签: matlab octave

我需要将多个文件的数据连接成一个矩阵。 到目前为止,我测试加载数据的方式类似于以下内容:

fid = fopen('data01.txt', 'r');
raw = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ',');
m = cellfun(@double, raw, 'UniformOutput', false);
value_of_interest = m{:,10}

...但是我在磁盘上拥有的数据集是很多文件,并且都存在于一个目录中。我更愿意引用这个目录的特定路径,而不是将我的脚本放在那里。如何修改我的脚本以便加载所述文件夹中所有文件的所有数据?

到目前为止,我有这个:

dirname = uigetdir;
files = dir(dirname);
fileIndex = find(~[files.isdir]);

for i = 1:length(fileIndex)
    fileName = files(fileIndex(i)).name;
    fid = fopen(fileName, 'r');
    raw = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ',');
    time = [m{:,4}, m{:,5}, m{:,6}];  %needs to contain a float
    converted_time = ((m{:,4} *  3600.0) + (m{:,5} * 60.0) + m{:,6}); %hh:mm:ss -> seconds
    values = power(m{:,10}, 2); 
    values(values <= thresh) = 0;
    % need to concat into the var 'values' here... also need to accumulate the time variable
end 

plot(converted_time, values);

......但我需要把两者放在一起。

编辑:我应该提一下,我的内存可能会耗尽,这将在下面的评论中解释为我选择的答案。

1 个答案:

答案 0 :(得分:2)

首先,再看一下如何定义要打开的文件的fileName。相反,您应该尝试fileName = [dirname, '\', files(fileIndex(i)).name];,因为name的{​​{1}}字段不会包含完整路径。这将解决您引用不在当前路径中的文件列表的问题。

现在,为了避免记住所有这些文件中的所有数据,我们可以在循环内的每个文件中完成这项工作

files

简短命令... plot(converted_time, values); hold('on'); end ,通常只用hold('on');编写,修改绘图轴,以便可以绘制后续数据而不删除任何先前的行。