Convert a substructure reference string into a valid definition structure for subsref and subsasgn - MATLAB Cody - MATLAB Central

Problem 988. Convert a substructure reference string into a valid definition structure for subsref and subsasgn

Difficulty:Rate

You have a reference to an element in a data structure, which you want to pass to a function. Not the value itself, but the reference. And you don't like to use evil eval constructions. Therefore, you convert the reference into a structure, like liked by Matlab's built-in subsref and subsasgn functions.

For example, to reference the value a(12), you would have to convert '(12)' into

def = 
  type: '()'
  subs: {[12]}

And to reference a(12).field_b{1,3}{2}((3:4),:).c, you would need to convert '(12).field_b{1,3}{2}((3:4),:).c' into

def(1) = 
  type: '()'
  subs: {[12]}
def(2) = 
  type: '.'
  subs: {'field_b'}
def(3) = 
  type: '{}'
  subs: {[1]  [3]}
def(4) = 
  type: '{}'
  subs: {2}
def(5) = 
  type: '()'
  subs: {[3 4]  ':'}
def(6) = 
  type: '.'
  subs: {'c'}

The assignment is correct when any sub-structure reference that is accepted by subsref and subsasgn is correctly converted from a string to a valid structure.

Note: Solutions wrapped in (f)eval(c), inline, str2func, regexprep (dynamic regular expressions), etc, are not appreciated.

Solution Stats

40.0% Correct | 60.0% Incorrect
Last Solution submitted on Dec 11, 2023

Solution Comments

Show comments
Why should you share code?
In a discussion on LInkedin about my recent blog post, Do these...
3
6

Problem Recent Solvers7

Suggested Problems

More from this Author31

Problem Tags

Community Treasure Hunt

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

Start Hunting!