How to selectively save the names and values of some workspace variables to a CSV file?

Consider the following
a = 3; b=7; c=5; d=9;
save('test.mat')
data = load('test.mat');
toSave = { 'b' ; 'c' };
writecell( horzcat( toSave , <missing code> ) ,'myfile.csv')
what should be the <missing code> in order to have the content of myfile.csv to be
b , 7
c , 5
?

 Akzeptierte Antwort

This should do the trick. If the variables aren't scalars the results might not be what you want.
a = 3; b=7; c=5; d=9;
save('test.mat')
data = load('test.mat');
toSave = { 'b' ; 'c' };
s=struct;
for n=1:numel(toSave)
s.(toSave{n})=data.(toSave{n});
end
writecell( horzcat( toSave , struct2cell(s) ) ,'myfile.csv')

3 Kommentare

Diaa
Diaa am 15 Sep. 2020
Bearbeitet: Diaa am 15 Sep. 2020
Thanks. Out of curiosity, is there a way to do it without for loop? I mean to extract the values of only the fields I have their names in toSave.
You could also ask load to only retrieve the variables of interest:
s=load('test.mat',toSave{:});
Note that loops have a pretty good performance, as long as you aren't dynamically growing arrays and there isn't a direct function to do it.
I totally forgot the simple way of selective loading.
Thanks for the hint.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Thanks to the inspiring answer of @Rik, I found the following solution without the need to use for loop
a = 3; b=7; c=5; d=9;
save('test.mat')
data = load('test.mat');
toSave = { 'b' ; 'c' };
writecell(horzcat(toSave, cellfun( @(C) data.(C),toSave,'UniformOutput',false)),'myfile.csv')

2 Kommentare

cellfun will only hide the loop. In general it will be slower that a well-written for loop. Just something to be aware of.
You are right, but I can't resist minimizing the code despite knowing it is not the best practice :)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2020a

Gefragt:

am 15 Sep. 2020

Kommentiert:

am 15 Sep. 2020

Community Treasure Hunt

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

Start Hunting!

Translated by