Using assignin or evalin command to populate Structure Elements with Numeric Data.

8 visualizaciones (últimos 30 días)
Hello,
I am getting an error while executing the below command:
assignin('base', 'A.B', 1)|
Error:
??? Error using ==> assignin
Invalid variable name "A.B" in ASSIGNIN.
As a work around i tried to use:
assignin('base', 'temp', 1);
evalin('base','A.B = temp');
evalin('base','clear temp');
The above work around was proposed in one of the previous threads:
The problem I have is that, my Structure elements are read from a Cell Array inside a for loop.
Lets say C = {'A.B', 'A1.B1'}
So how do I pass 'C' as a parameter to the below line:
evalin('base','C = temp')
Expected output: A.B = 1, A1.B1 = 1 (In Base Workspace)
I also tried to use setfield command, but could not succeed.
Thanks, Shyama

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 24 de Jun. de 2015
Editada: Azzi Abdelmalek el 24 de Jun. de 2015
For your problem you can use
C = {'A.B', 'A1.B1'}
assignin('base', 'temp', 1);
cellfun(@(x) evalin('base',[x '=temp']),C)

Más respuestas (1)

Matt J
Matt J el 24 de Jun. de 2015
Not sure why you're not just using setfield(), but another option is
evalin('base','A.B=1');
or
evalin('base',['A.B=' num2str(1)]);
  1 comentario
Shyama Prasad Mishra
Shyama Prasad Mishra el 25 de Jun. de 2015
Editada: Shyama Prasad Mishra el 25 de Jun. de 2015
Hi Matt,
I am not using set field because A.B can be any string.
I tried evalin('caller',['setfield(A,''B'',10)']), which works.
How ever when I try to pass the structure name as a string, it does not work.
For Example: C = 'A'; evalin('base',['setfield(C,''B'',10)']) gives an output C.B = 10.
Where as I want the output to be A.B = 10
Am I using Setfield wrongly?

Iniciar sesión para comentar.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by