Create a nested structure using a variable as field name

46 ビュー (過去 30 日間)
Luca Amerio
Luca Amerio 2016 年 11 月 3 日
コメント済み: Luca Amerio 2016 年 11 月 3 日
Hi everybody
Lets say that I have a variable
of which I don't know the number of levels and that I would like to use this path as "address" of a variable inside a structure, such that
Now, I know that I can use string variables to set or get structure fileds using a notation like
But this works with one level or, with a bit of string manipulation, if I know the number of levels I must call. I'm thinking at something like:
Can you think of any kind of trick so that I can write a function that adapt itself to the number of levels I pass it through the path variable?


Jan 2016 年 11 月 3 日
編集済み: Jan 2016 年 11 月 3 日
This is a job for the getfield and setfield commands:
PathStr = '\levelOne\levelTwo\levelThree'; % Do not shadow the PATH command
Fields = strsplit(PathStr,'\'); % Ignore initial blank field later
S = [];
S = setfield(S, Fields{2:end}, 1)
V = getfield(S, Fields{2:end})
Internally this calls subsassgn, which can be done directly also. I'd move this into a function, which ignores at least a leading separator automatically:
function S = SetPathField(S, PathStr, Value)
if length(PathStr) >= 1 && PathStr(1) == '\'
Fields = regexp(PathStr(2:end), '\', 'split');
Fields = regexp(PathStr, '\', 'split');
Types = cell(1, numel(Fields));
Types(:) = {'.'};
S = subsasgn(S, struct('type', Types, 'subs', Fields), Value);
  1 件のコメント
Luca Amerio
Luca Amerio 2016 年 11 月 3 日
Didn't know these two functions. They are exactly what I was looking for. Thank you


その他の回答 (0 件)



Community Treasure Hunt

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

Start Hunting!

Translated by