我四处搜索,找到了一些解决问题的潜在方案,但无法实现代码。
基本上,我有一个目录,其中包含32个子文件夹。32个子文件夹中的每一个子文件夹都有4个文件在中(.mat,每个文件有1行和几百万列(。我感兴趣的变量被称为数据(请参阅下面的代码(。
我需要访问子文件夹子集内的所有4.mat文件,并将它们附加/连接到一个大矩阵中。此外,每个子文件夹中的每组4个文件应在结束矩阵中相邻。
此外,子文件夹和其中文件的名称是已知的:
文件夹=TT1、TT2、等
文件=TT1ch1、TT1ch2、TT1ch3、TT1cm4;TT2ch1、TT2ch2、TT2ch3、TT2ch4、等
我还需要在代码中指定实际打开和读取4个文件的子文件夹。并非所有内容都需要随时阅读。到目前为止,我有这个:
TTs = [1,2,3,4,5]; % List of sub-folders to use.
for i = TTs;
addpath(strcat('TT',num2str(i)));
cd (strcat('TT',num2str(i)));
for w = 1:4; %get data from the 4 files
load(strcat('TT',num2str(i),'ch', num2str(w), '.mat'));
allChs(w,:) = data(1,:); %concatenate into one matrix
end
cd ..
rmpath(strcat('TT',num2str(i)));
end
有了这个代码,我可以从给定子文件夹的4个文件中读取数据,并将其复制到一个新的矩阵(allChs(中。然而,当我试图添加代码来浏览所有文件夹时,我只是覆盖了我所拥有的。。。
我尝试过不同的东西,但在这个阶段我还是很纠结。我们非常欢迎任何帮助。
干杯,Oiko
正如@Cris Luengo所说,你不需要在路径中添加一个文件夹来读取。
此外,你不需要cd
,你最好明确你想从中读取的路径:
parentPath = <your-main-folder>;
TTs = [1,2,3,4,5]; % List of sub-folders to use.
现在,你只需要在处理文件夹的同时继续处理行,这样它就不会覆盖下一个子文件夹:
for k = TTs;
for w = 1:4; %get data from the 4 files
load(fullfile(parentPath ,strcat('TT',num2str(i),'ch', num2str(w), '.mat')));
allChs(4*(k-1)+w,:) = data(1,:); %concatenate into one matrix
end
end