我需要将多个文件的数据连接成一个矩阵。 到目前为止,我测试加载数据的方式类似于以下内容:
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);
......但我需要把两者放在一起。
编辑:我应该提一下,我的内存可能会耗尽,这将在下面的评论中解释为我选择的答案。
答案 0 :(得分:2)
首先,再看一下如何定义要打开的文件的fileName
。相反,您应该尝试fileName = [dirname, '\', files(fileIndex(i)).name];
,因为name
的{{1}}字段不会包含完整路径。这将解决您引用不在当前路径中的文件列表的问题。
现在,为了避免记住所有这些文件中的所有数据,我们可以在循环内的每个文件中完成这项工作:
files
简短命令...
plot(converted_time, values);
hold('on');
end
,通常只用hold('on');
编写,修改绘图轴,以便可以绘制后续数据而不删除任何先前的行。