How to pass in a list of variables to "load" function without using eval?

11 views (last 30 days)
K E on 19 May 2014
Commented: K E on 19 May 2014
Is there a way to load in a list of variables from a file, if the list of variables is passed in? I would like to avoid using eval. Here is what I am doing:
% Create dummy variables so this example works
dog = rand(1,5); cat = rand(1,5);
budgie = rand(1,5); fish = rand(1,5);
alligator=rand(1,5); hamster = rand(1,5);
% Create dummy file
save('myPetsFile.mat'); % Real mat file is large, 50+ variables
petList = {'dog', 'cat', 'budgie'};
filePets = 'myPetsFile.mat';
strPets = sprintf('''%s'',', petList{:}); % Add single quotes and comma
strPets = strPets(1:end-1); % Remove trailing comma
eval(['PS = load(filePets, ' strPets ');']);
I also would like to be able to combine the listed variables with additional directly-named variables, such as 'fish', 'alligator' in this example, but again avoid the eval command:
eval(['PS = load(filePets, ' strPets ', ''fish'', ''alligator'');']);

Accepted Answer

Kelly Kearney
Kelly Kearney on 19 May 2014
Don't need the sprintf at all, as long as petList is already a cell array of strings:
PS = load(filePets, petList{:});
  1 Comment
K E on 19 May 2014
Perfect, thanks. Knew there had to be a simpler way! This works too,
PS = load(filePets, petList{:}, 'fish', 'alligator');

Sign in to comment.

More Answers (1)

Azzi Abdelmalek
Azzi Abdelmalek on 19 May 2014
PS = load(filePets, sprintf('%s',petList{:}))
  1 Comment
K E on 19 May 2014
The load command seems to want the quotes and commas in its inputs which is why I had to use eval. I revised the example.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!