我在同一目录中有4个文件夹,每个文件夹包含~19 .xls文件。我已经编写了下面的代码来获取每个文件夹的名称以及文件夹中每个.xls文件的名称。
path='E:\Practice';
folder = path;
dirListing = dir(folder);
dirListing=dirListing(3:end);%first 2 are just pointers
for i=1:length(dirListing);
f{i} = fullfile(path, dirListing(i,1).name);%obtain the name of each folder
files{i}=dir(fullfile(f{i},'*.xls'));%find the .xls files
for j=1:length(files{1,i});
File_Name{1,i}{j,1}=files{1,i}(j,1).name;%find the name of each .xls file
end
end
现在我正在尝试使用xlsread将数据从excel导入到matlab中。我正在努力的是知道如何在excel文件位于不同目录(不同文件夹)的循环中将数据加载到matlab中。
这给我留下了一个名为File_Name的1x4单元格,其中每个单元格引用位于“path”下的不同文件夹,然后在每个单元格中都是想要导入的电子表格的名称。单元格的大小会随着每个文件夹中电子表格的数量的不同而变化。
有什么想法吗?
提前致谢
答案 0 :(得分:0)
看一下由matlab社区成员撰写的this helper function。 它允许您递归搜索目录以查找与特定模式匹配的文件。这是一个在查找匹配文件时使用的超级便利功能。
您应该能够在一次调用此功能时找到所有文件。然后,您可以循环遍历rdir函数的结果,将文件一次加载到您想要的任何数据结构中。
答案 1 :(得分:0)
我不确定我是否理解你的问题,但你所要做的就是连接包含目录(f {})和文件名的字符串。修改你的代码:
for i=1:length(dirListing);
f{i} = fullfile(path, dirListing(i,1).name);%obtain the name of each folder
files{i}=dir(fullfile(f{i},'*.xls'));%find the .xls files
for j=1:length(files{1,i});
File_Name{1,i}{j,1}=files{1,i}(j,1).name;%find the name of each .xls file
fullpath = [f{i} '/' File_Name{1,i}{j,1}];
disp(['Reading file: ' fullpath])
x = xlsread(fullpath);
end
end
这适用于* nix系统。您可能必须在Windows上使用'\'加入文件名。我会找到一种更优雅的方式并更新此帖子。
编辑:命令filesep
提供正斜杠或反斜杠,具体取决于您的系统。以下内容应该为您提供完整的路径:
fullpath = [f{i} filesep File_Name{1,i}{j,1}];