如何在MATLAB中处理文件列表

时间:2017-11-14 15:30:50

标签: matlab csv directory

在MATLAB中,我的功能是这样的:

C001

我有100个名为C002...C100.csv的文件夹。每个文件夹都有三个C001_Deo.csv个文件,名称如下:C001_Oxy.csvC001_Tal.csvC002_Deo.csvC002_Oxy.csvC002_Tal.csvdata_conversion(names) ,...

有没有人可以帮我写一个循环,这样我就可以一次运行{{1}}来获得所有结果。然后我不需要运行100次。 我尝试了很多次却失败了。谢谢!

3 个答案:

答案 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