1

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

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);

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

编辑:我应该提到我可能会用完内存,稍后将在下面对我选择的答案的评论中对此进行解释。

4

1 回答 1

2

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

现在,为了避免记住所有这些文件中的所有数据,我们可以在循环中为每个文件执行此工作:

...
    plot(converted_time, values);
    hold('on');
end

短命令hold('on');,通常编写简单地hold on;修改绘图轴,以便可以绘制后续数据而不会删除任何先前的行。

于 2013-01-24T02:42:22.400 回答