On Thursday, December 13, 2012 12:21:06 PM UTC+13, Alex wrote: > I am having a problem where I am trying to create a cell array of strings to use in rmfield. I am combining a stem(chart) with a number (any number) to create the field I want to remove. For example, if I need to remove DeltaT.chart1, deltaT.chart6, deltaT.chart7, then my cell array would be: > > chart1 > > chart6 > > chart7 > > > > The problem I have is when I get to chart 10 or more. If I have a number greater than 10 I would have the following: > > chart1 > > chart6 > > chart7 > > chart10 > > and I get the error > > ??? Error using ==> vertcat > > CAT arguments dimensions are not consistent. > > > > Error in ==> remover at 28 > > toremove = [toremove;field] > > > > I think because I am trying to fit a 7 character wide (chart10) string into a 6 character wide cell array. > > > > Is there a way around this or something I can do instead? My code is below if it helps. > > > > Thanks, > > Alex > > > > > > > > > > for a = 17%1:22 > > listremove =  > > toremove =  > > rmvr = 0; > > Fileone = 'NODIPSinBTBTB_Delta'; > > File = [Fileone,'Comp',int2str(a)] > > > > load([Fileone,int2str(a),'.mat']) > > > > data = deltaT; > > stem = 'chart'; > > > > for L = 1:length(fieldnames(data)) > > field = [stem,int2str(L)]; > > > > if length(data.(field)) == 0 > > rmvr = 1 > > listremove = [listremove L]; > > end > > end > > if rmvr == 1 > > for g = 1:length(listremove) > > field = [stem,int2str(listremove(g))] > > toremove = [toremove;field] > > end > > deltaT = rmfield(data, toremove) > > end > > > > save(File, 'deltaT') > > > > clear all > > > > end
This seems a very roundabout way of doing it........... Have you thought of using structure arrays? So, instead of DeltaT.chart1, DeltaT.chart2, etc you'd have DeltaT(1).chart, DeltaT(2).chart, etc which you can deal with in a for loop.