MATLAB Answers


How to generate names?

Asked by Hello kity on 8 Jan 2013

I want to make my code shorter.

I have this code:


instead there should be a for loop

for i=1:6
 Sheetname'write i'=txt'write i'{1,3};

how to :) ?

  1 Comment

Is there a specific reason why you implemented your script this way? Such a for loop will be slow and hard to read later on.


No products are associated with this question.

5 Answers

Answer by Hassan F
on 8 Jan 2013

You can use eval

for i=1:6
 eval(['Sheetname' num2str(i) '=txt' num2str(i) '{1,3};'])


Matt J
on 8 Jan 2013

No, it's still not advised because

  • You're introducing variables non-explicitly into the workspace (so-called poofing). This creates hazards discussed here.
  • Enumerating variables through their names makes them hard to index later

The better thing to do here would be

    for i=1:6
     Sheetname{i} = eval(['txt' num2str(i) '{1,3};'])
Jan Simon
on 8 Jan 2013

I do think that it matters. Programmers get used to use methods they are used to use. The more EVAL you write, the more acceptable does this command look, because we are human.

Much better in theory, practice and from the viewpoint of training the brain to think in efficient ways:

Sheetname{1} = txt{1,3};
Sheetname{2} = txt{2,3};
Sheetname{3} = txt{3,3};
Sheetname{4} = txt{4,3};
Sheetname{5} = txt{5,3};
Sheetname{6} = txt{6,3};

Never include an index in the name of a variable. You would not include your current weight to your name also, because the inconveniences are obviously.

Kind regards, Jan70.6kg

Totally makes sense.


Answer by Hello kity on 8 Jan 2013

I tried this : >>

for i=1:6
A=['Sheetname' sprintf('%d' , i)];
B=['txt' sprintf('%d', i)];
??? Cell contents reference from a non-cell array object.

somehow it gives error about B{1,3}


>> txt1{1,3}

ans =


  1 Comment

See my answer, but you should avoid this solution and use cells or other classes which suits your data the most.

Answer by Azzi Abdelmalek
on 8 Jan 2013

for ii=1:6
A{ii}=sprintf('Sheetname%d' , ii)


Answer by Image Analyst
on 8 Jan 2013

My m-files are usually 2-3 thousand lines long. I never worry about saving a paltry 3 lines. Why do you care? If you want to use fewer variables, say use a cell array for Sheetname instead of 6 variables, then you could do that, but with only 6 variable, it's really no big deal. Now if you had dozens or hundred variables named like that (which we see sometimes).....then yes, you'd want an array, but I'm not going to ding you for only 6 uniquely named variables.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!