在MATLAB中,我的功能是这样的:
C001
我有100个名为C002
,...
,C100
,.csv
的文件夹。每个文件夹都有三个C001_Deo.csv
个文件,名称如下:C001_Oxy.csv
,C001_Tal.csv
,C002_Deo.csv
,C002_Oxy.csv
,C002_Tal.csv
,data_conversion(names)
,...
有没有人可以帮我写一个循环,这样我就可以一次运行{{1}}来获得所有结果。然后我不需要运行100次。 我尝试了很多次却失败了。谢谢!
答案 0 :(得分:1)
您的文件名存储在cell array中。 names(1)
返回names
的第一个单元格。 names{1}
返回第一个单元格的内容,因此您的循环将如下所示
names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'}
for loopi = 1:length(names)
data_conversion(names{loopi})
end
我假设您的所有文件都在一个位置,因此您可能希望自动获取文件列表:
folders = dir('d:\C*');
for loopi = 1:length(folders)
% if order matters
folder = strcat(folders(loopi).folder,'\',folders(loopi).name);
f1 = dir([folder,'\*_Deo.csv']);
f2 = dir([folder,'\*_Oxy.csv']);
f3 = dir([folder,'\*_Tal.csv']);
data_conversion({f1(1).name, f2(1).name, f3(1).name});
end
dir
返回struct array,其中使用括号而不是括号编制索引。
答案 1 :(得分:1)
如果你的函数需要一次完整的单元格数组,那么这里有一个选项:
finally
否则,请使用Laure的解决方案。
答案 2 :(得分:0)
你可以试试这个:
baseFolder = 'd:\';
for i=1:100
% get a string for 001 -> 100
strtmp = num2str(i);
str = cat(2,repmat('0',1,3-length(strtmp)),strtmp);
% reconstitute folder path
folderString = [baseFolder 'C' str filesep];
% and the 3 file paths
f1 = [folderString 'C' str '_Deo.csv'];
f2 = [folderString 'C' str '_Oxy.csv'];
f3 = [folderString 'C' str '_Tal.csv'];
% run your data_conversion function
data_conversion({f1 f2 f3})
end