Iterate through alphabetical names

Hello there,
maybe it's a dumb question, but how do I iterate through alphabetical names? Assuming I have matrices A to D, then how can I use those names in a loop?
My approach would be to create a string
names='ABCD'
and loop through those in a loop
for i=0:4
names(i)
end for
But how can I use this for example for the following operation?
boxplot(A(:))
If I simply use
names='ABCD';
for i=0:4
boxplot(name(i)(:))
end for
Then it doesn't work, of course. strcat does not do the job either.
I hope someone has an idea :)
Cheers

 Accepted Answer

Not dumb at all.
You need to use the eval function in your loop:
A = rand(2,10);
B = rand(3,10);
C = rand(4,10);
D = rand(5,10);
names = 'ABCD';
for k1 = 1:length(names)
figure(k1)
boxplot(eval(names(k1)))
end

More Answers (2)

Okay one more question ... how can I access a variable using a predefined name vector?
for i=1:length(models)
fprintf('\t Open %s\n', models{i})
eval(models(i))=xlsread(strcat(path,'\',eval(models(i)),'_PER.xlsx'));
end
Eval does not do the job here ?

4 Comments

If you already have a predefined variable name, simply use it:
for i=1:length(models)
fprintf('\t Open %s\n', models{i})
models(i)=xlsread(strcat(path,'\',eval(models(i)),'_PER.xlsx'));
end
However you will probably need to add dimensions to it to put the xlsread data into it:
for i=1:length(models)
fprintf('\t Open %s\n', models{i})
models(i,:,:)=xlsread(strcat(path,'\',eval(models(i)),'_PER.xlsx'));
end
Just guessing here, since I have no idea what ‘models’ is, what it contains, or that the various xls arrays are the same size (although I assume here that they are).
Marc
Marc on 22 May 2014
Edited: Marc on 16 Jul 2014
My bad ... models is the vector containing the names. Using models{i} puts the files into models ... not exactly what I need :D using models(i) doesn't work. Using eval( )= doesn't work either no matter what I place within the brackets.
path=''; fprintf('Path: %s\n', path)
models={
'102030'
'30SR'
'30WHS1'
'30WHS2'
'40'
'4550'
'51'
'556077'
'200210220'
'230240'};
fprintf('Open Excel sheets:\n')
for i=1:length(models)
fprintf('\t Open %s\n', models{i})
xlsread(strcat(path,'\',models{i},'_PER.xlsx'));
end
Okay - in the meantime I switched to use structs instead of regular variables ... I thought too much in common programming languages ;)
See if evalin will do what you want.

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 22 May 2014

Edited:

on 16 Jul 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!