Opening mat files with uiopen and copying data to array
Ältere Kommentare anzeigen
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 Kommentar
Stephen23
am 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)?
Akzeptierte Antwort
Weitere Antworten (2)
Bob Thompson
am 17 Apr. 2019
0 Stimmen
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 Kommentar
Stephen23
am 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
am 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 Kommentare
Bob Thompson
am 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
am 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
am 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;
Kategorien
Mehr zu Workspace Variables and MAT Files finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!