MATLAB: A better way to change the name of a structure field

field namesMATLABstructurestuctures

Hello,
I would like to change the name of a structure field at run time. Specifically, I want to change all the names to upper case. Currently I am achieving this with the following function:
function s = upperfnames(s)
% upperfnames: converts all the field names in a structure to upper case
% get the structure field names
fn = fieldnames(s);
for ii = 1:length(fn)
fname = fn{ii};
% check if the field is already upper case
if ~strcmp(fname, upper(fname))
% if not create an upper case copy of the field
s.(upper(fname)) = s.(fname);
% and remove the original
s = rmfield(s, fname);
end
end
end
The problem here is that I must create a copy of any fields with names which must be changed. According to the whos function as I step through the code, this uses up double the memory required for the field. This could cause problems when I forget about this in a year or two and try to change the name of a structure containing lots of data. Is there a more memory efficient way of doing this?
Thanks,
Richard

Best Answer

You can use the C-mex function published in the FEX: RenameField
F = fieldnames(S);
S = RenameField(S, F, upper(F));
It creates a shared data copy, such that the memory consumption is minimal.
See also: Loren's Blog
BTW: I get exactly these two links on top, if I ask Google for "Matlab rename field".