how to rename fields in struc and adding new field name
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
TESFALEM ALDADA
am 17 Dez. 2020
Kommentiert: TESFALEM ALDADA
am 21 Dez. 2020
Hello everyone
I have a stuct to work wit and i wonted to rename the field name (XX) by 'Area (km2)' and also i wanted to add new filed column between YY and ZZ as shown below.
wish you best
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 17 Dez. 2020
struct fieldnames must be valid MATLAB identifiers, so spaces and brackets are not permitted.
The characters are permitted in the names of Variables in table() objects.
To add a new field at a particular location, the easiest way is to add the new field and then to use orderfields() to change the order.
3 Kommentare
Walter Roberson
am 21 Dez. 2020
foo = struct('a', 1, 'b', 2, 'd', 4);
foo.c = 3
%new field has been added but it is out of place
newfoo = orderfields(foo, {'d', 'c', 'b', 'a'})
%and now it is in very specific place
Weitere Antworten (1)
Jan
am 21 Dez. 2020
Adding a field at the end is trivial:
porositiy.newField = [];
Adding a field at a specific location is a bad idea, because the order of fields is not really fixed. But it works:
function S = AddFieldAfter(S, AfterField, NewField, NewData)
SField = fieldnames(S);
SData = struct2cell(S);
nS = numel(S);
sizeS = size(S);
index = find(strcmp(SField, AfterField));
if ~isempty(index)
SField = cat(1, SField(1:index), {NewField}, SField(index + 1:end));
if ~isequal(size(NewData), sizeS)
NewDataC = cell([1, nS]);
NewDataC(:) = {NewData};
end
SData = cat(1, SData(1:index, 1:nS), NewDataC, SData(index + 1:end, 1:nS));
S = reshape(cell2struct(SData, SField), sizeS);
else % Field not found, append at the end:
S.(NewField) = NewData;
end
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!