Opening mat files with uiopen and copying data to array
Show older comments
I have some mat files organized as cell arrays. All my mat files have the same structure and have progressive names, like MyFile_001, MyFile_002 and so on.
Copying data to arrays is an easy operation, such as
load('MyFile_001.mat')
Data1 = MyFile_001.Y(1).Data;
Data2 = MyFile_001.Y(2).Data;
but what if I want to choose which mat file to open instead of 'MyFile_001'?
The first row becomes
uiopen('load')
so I choose through GUI the file to be opened. How can I save data to arrays now?
1 Comment
Stephen23
on 17 Apr 2019
It is not clear from your question: do the structures (very unfortunately) all have the same names as the file names (e.g. MyFile_001), or do they (sensibly) all have the same name (e.g. Y)?
Accepted Answer
More Answers (2)
Bob Thompson
on 17 Apr 2019
0 votes
It seems like your issue isn't so much opening specific files, but identifying new variables. With a bit of trickery you can identify what variables are new using who.
A = who;
uiopen;
Aprime = who;
new = cellfun(@(x) sum(ismember(A,x)),Aprime,'UniformOutput',0);
new = [Aprime([new{:}]~=1)];
1 Comment
Stephen23
on 17 Apr 2019
Introspective programming (e.g. who) is slow and complex. See:
Simpler and more efficient to simply load into an output variable.
Walter Roberson
on 17 Apr 2019
[filename, pathname] = uigetfile('*.mat');
if isnumeric(filename); error('cancel'); end
fullname = fullfile(pathname, filename);
datastruct = load(fullname, 'Y');
Data1 = datastruct.Y(1).Data;
Data2 = datastruct.Y(2).Data;
4 Comments
Bob Thompson
on 17 Apr 2019
Sweet, this is definitely a better idea than mine, I just wasn't sure how to get around loading an already named variable. I don't work with .mat files directly often enough.
banco freno
on 18 Apr 2019
"The mat files contain many fields and Y is one of them. Why do I get this message?"
Because this answer does not take into account the description of your .mat files, which apparently contain nested structures with the variable name the same as the filename (i.e. the files contain badly designed data).
Walter Roberson
on 18 Apr 2019
[filename, pathname] = uigetfile('*.mat');
if isnumeric(filename); error('cancel'); end
fullname = fullfile(pathname, filename);
datastruct = load(fullname);
fn = fieldnames(datastruct); %data is stored in a struct named for the file
Data1 = datastruct.(fn{1}).Y(1).Data;
Data2 = datastruct.(fn{1}).Y(2).Data;
Categories
Find more on Workspace Variables and MAT Files in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!