How may I dynamically refer to a loaded mat array to modify or save it

2 次查看(过去 30 天)
I am trying to write a simple piece of code where I provide a function with a list name (as a string) and a new string to add to the list (also a string). It will then load that library, add it to the list, sort it, and re-save it. I seem to be getting stuck how to dynamically reference the list name. I desire to do this so that I may add new entries to many other lists I have on my computer quickly with the console.
function addtolist(list,string)
load([list '.mat']); %%%this line works fine
list = vertcat([list '.mat'],string); %%%this line is incorrect
list = sort(list);
save([list '.mat']); %%%this line also incorrectly references the cultures list
end
INPUT: addtolist('Cultures','Armenian') OUTPUT: Nothing (old file is overwritten with line of data)
Thanks in advance for any help here,
William

回答(3 个)

Walter Roberson
Walter Roberson 2015-12-11
编辑:Walter Roberson 2015-12-11
In particular use
filename = [list '.mat']
data = load(filename);
data.(list) = sort([data.(list); {string}]);
save(filename, 'data', '-struct');
I explicitly used cell array form as vertcat() of a char array does not work if the new item is not the same width but there is no problem with cell arrays.

Stephen23
Stephen23 2015-12-11
编辑:Stephen23 2019-6-19

Will Kinsman
Will Kinsman 2015-12-11
编辑:Will Kinsman 2015-12-11
The code ended up looking like this and used the eval() function
function addtolist(list,string)
filename = [list '.mat'];
data = load(filename);
data = sort([data.(list); {string}]);
eval([list '= data']);
save(list,list);
I do understand the danger of using dynamically referenced variables, however this is only 5 lines of code and is meant to be used as quick tool entirely independent of all other code. Thank you for the help!

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by