如何将循环中的文件名提取到字符数组中?

时间:2017-11-17 18:51:32

标签: matlab

我有一个如下代码。我想生成一个包含所有文件名的数组,并与我从每个文件中收集的数据相结合。

  DataCC = dir('*-CC.xls'); %select the file type
  MeanAreaCC=[];
  PlateNameCC=[];
  for w = 1: numel(DataCC)
      basefilenamedata=DataCC(w).name; %extract the file name
      T=readtable(basefilenamedata); %read table in
      PlateNameCC=[PlateNameCC basefilenamedata]; %generate the file name array
      MeanAreaCC = [MeanAreaCC mean(T.Area)]; %generate the data array
  end

  x=array2table([PlateNameCC, transpose(MeanAreaCC)],'VariableNames',{'Iso-Condi-Rep','MeanAreaCC'}); %combine two arrays just generated
  writetable(x,fullfile(DataFolder,'DataSummary.xls'),'Sheet',1,'Range','A1');

但我的代码不起作用,因为PlateNameCC是作为一个字符而不是数组生成的。当我将PlateNameCCMeanAreaCC合并时,会出现错误,抱怨不同的数组大小。有人可以帮我查一下吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这里有一些问题。

首先,PlateNameCC = [PlateNameCC basefilenamedata];将创建一个长字符串的垃圾。

例如:

fnames = dir('*.m')
namelist = [];
for ii = 1:numel(fnames)
    namelist = [namelist fnames(ii).name]
end

给我:

namelist =

    'SOcode.mcallbacksclass.mtestcode.m'

您想使用string arraycell array

fnames = dir('*.m');
namelist1 = string({fnames.name});
namelist2 = {fnames.name};

返回:

namelist1 = 

  1×3 string array

    "SOcode.m"    "callbacksclass.m"    "testcode.m"


namelist2 =

  1×3 cell array

    {'SOcode.m'}    {'callbacksclass.m'}    {'testcode.m'}

其次,当您只使用table构造函数本身时,尝试连接两个(非常)不同的数组来创建表是没有意义的:

fnames = dir('*.m');
namelist = string({fnames.name});
data = [1, 2, 3];

T = table(namelist.', data.');

给出了:

T =

  3×2 table

           Var1           Var2
    __________________    ____

    "SOcode.m"            1   
    "callbacksclass.m"    2   
    "testcode.m"          3