我编写了一个循环代码,将我的表文件名提取为字符串或数组,同时将数据收集到数组中。但是我发现我的代码出错了,因为只有一个文件被读取并在循环中反复重复。我不知道我的代码在哪里出错了,我花了几个小时才找到问题。有人能帮帮我吗?
DataCircle = dir('*-circle.xls');
MeanAreaCircle = [];
ColonyNumCircle = [];
PlateNameCircle = [];
for zz = 1:numel(DataCircle)
basefilenamedata1 = DataCircle(w).name; % generate the base name
DataName1 = regexprep(basefilenamedata1,'-circle.xls',''); %replace part of the name and the extension
PlateNameCircle = [PlateNameCircle DataName1]; % collect the file name into a string
T1 = readtable(basefilenamedata1); % read data in
MeanAreaCircle = [MeanAreaCircle mean(T1.area)]; % collect the mean for area
end
我得到的是这样的,这是错误的:
>> PlateNameCircle
PlateNameCircle ='IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813IMG_0813'
>> MeanAreaCircle
MeanAreaCircle =
1.0e+03 *
6.4152 6.4152 6.4152 6.4152 6.4152 6.4152 6.4152 6.4152 6.4152 6.4152
我的输入文件列表:
IMG_0809-CC.xls
IMG_0809-circle.xls
IMG_0810-CC.xls
IMG_0810-circle.xls
IMG_0812-CC.xls
IMG_0812-circle.xls
IMG_0813-CC.xls
IMG_0813-circle.xls
我想要的是一个列或一个字符数组或这样的字符串:
PlateNameCircle = 'IMG_0809' 'IMG_0810' 'IMG_0811' 'IMG_0812' 'IMG_0813'
答案 0 :(得分:1)
1:您正在使用w
索引循环变量的名称,而不是zz
。显然,工作区中有一个名为w
的杂散变量,等于8.这就是为什么你总是读取同一个文件的原因,无论迭代次数如何。
2:您没有在名称中添加空格:
PlateNameCircle = [PlateNameCircle ' ' DataName1];
3:您在每两次连续迭代中添加相同的名称:
PlateNameCircle = 'IMG_0809-CC IMG_0809 IMG_0810-CC IMG_0810 ...'
矢量化并使用单元格字符串
预分配而非动态增长
给你的变量提供更好的名字(尽管你已经在那里做得很好,tbh)
类似的东西:
filenames = {D.name};
PlateNameCircle = regexprep(filenames,'-circle.xls',''); %...doubt this is actually what you want, but it *is* what you've written...
MeanAreaCircle = zeros(numel(filenames),1);
ColonyNumCircle = []; % <- not used?
for zz = 1:numel(filenames)
T1 = readtable(filenames{zz}); % read data in
MeanAreaCircle(zz) = mean(T1.area); % collect the mean for area
end
答案 1 :(得分:0)
我认为
中的 wbasefilenamedata1 = DataCircle(w).name;
应该是 zz 。否则,您总是在查看列表中的第一个文件。