Matlab-将值减少1,直到没有错误

Matlab-将值减少1,直到没有错误,matlab,reshape,mesh,contour,Matlab,Reshape,Mesh,Contour,我使用同一个程序分析包含不同列数的数据文件 每个数据文件都需要不同的条件才能使重塑功能成功工作。我有下面的代码,它可以完美地工作。简单地说,如果整形不成功,则在raw=raw(:,1,x)中从x中减去1并尝试重塑,如果仍然无法重塑,则会再次尝试,以此类推 有没有办法重写这段代码,让它不那么乏味 [~, ~, raw] = xlsread(test_filename,test_sheetname); try raw = raw(:,1:17); d = reshape([raw{:}],

我使用同一个程序分析包含不同列数的数据文件

每个数据文件都需要不同的条件才能使
重塑
功能成功工作。我有下面的代码,它可以完美地工作。简单地说,如果整形不成功,则在
raw=raw(:,1,x)中从x中减去1
并尝试重塑,如果仍然无法重塑,则会再次尝试,以此类推

有没有办法重写这段代码,让它不那么乏味

[~, ~, raw] = xlsread(test_filename,test_sheetname);

    try raw = raw(:,1:17); d = reshape([raw{:}],size(raw)); catch 
    try raw = raw(:,1:16); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:15); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:14); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:13); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:12); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:11); d = reshape([raw{:}],size(raw));catch 
    end
    end
    end
    end
    end  
    end   
    end

如评论中所述,这个问题需要澄清。但是,可以使用for循环来避免嵌套try/catch语句:

for x = 17:-1:11
  try
    raw = raw(:,1:x); 
    d = reshape([raw{:}],size(raw)); 
    break;
  catch
  end
end

原始代码中有什么?请随机提供一些示例数据,以便我们更好地理解问题。我不明白你的重塑声明应该怎么做。如果所有单元格元素都有标量,它将始终有效;如果任何单元格有多个值,它将永远不起作用,除非另一个单元格为空。这些数据是如何生成的?为什么是细胞阵列?为什么可以删除部分数据?谢谢你的评论,我做了一些更改来解决你的问题。这仍然没有意义。请创建一个小示例
raw
,供您分享。您是否正在删除包含空单元格的列?还是用文字?这些事情中的任何一件都可以比像你一样反复尝试更容易、更有效地完成。像这样使用try/catch,或者像在答案中那样在循环中使用try/catch,这是一个非常糟糕的设计。