Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Setting name of variable equal to name of imported file

Asked by John on 19 Dec 2011

Hi,

I'm importing data into Matlab from excel via the following command:

cycle=xlsread('E:\DC.xlsx','Sheet1');

How can I set the name of the metadata to be the same as the name of the imported excel file.For example:

sch_metadata.name = 'DC';

It will be looping through files in a folder so I wont know the name in advance

Many thanks

0 Comments

John

Products

No products are associated with this question.

2 Answers

Answer by Robert Cumming on 19 Dec 2011

if you must do it then use dynamic fieldnames

   metadata.(sch_metadata.name) = cycle

3 Comments

John on 19 Dec 2011

Thanks for the reply,

Maybe I didn't describe it very well, I want to save it with the same as the imported excel file, not as the variable cycle.

Would you suggest the same in this case?

Many thanks

Full code:

sch_cycle=xlsread('E:\DC.xlsx','Sheet1');
nrows = size(cycle,1);
sch_grade=[0,0;nrows,0];
sch_key_on=[0 1; nrows 1];
sch_metadata.net = 'DC';
sch_metadata.proprietary='public';
save DC.mat

Robert Cumming on 19 Dec 2011

same theory. TO get the filename use:

[fullpath, filename, ext] = fileparts ( 'E:\DC.xlsx' );

Then: sch_metadata.net = filename;

John on 19 Dec 2011

Thanks very much

Robert Cumming
Answer by Matt Tearle on 19 Dec 2011

If you're going to be looping on the files, you're probably doing something like

x = cellstr(ls('*.xlsx'));
for k = 1:length(x)
  % do stuff
end

In the "do stuff" bit, you should use fileparts to pull apart each filename string:

[~,fn] = fileparts(x{k});
sch_metadata.net = fn;
save(fn);
% or save([fn,'.mat']) if you want to be explicit

1 Comment

John on 19 Dec 2011

Thanks very much

Matt Tearle

Contact us