Verfasst am: 22.11.2015, 16:21
Titel: ausgewählte *.mat Datei auf Format des Inhalts überprüfen
Hallo goMatlab Forum,
ich sitze nun schon seit einiger Zeit an meiner GUI Signalviewer zur Darstellung von Signalen im Zeit- und Frequenzbereich. Aktuell beschäftige ich mit der Untergui zur Auswahl der *.mat Files und deren Inhalt. Die Auswahl ist auch bereits realisiert aber ich hänge nun an der Überprüfung der Daten. Der im linken Fenster ausgewählte mat-file wird zunächst per
load
geöffnet und die Feldnamen des Structs ermittelt. Nun muss jedes Feld des Structs überprüft werden.
Zulässig sind nur Arrays mit der Dimension [1xN] oder [Nx1]. Weitere Verschachtelung wie structs, cells etc innerhalb eines Feldes nicht zulässig. Ich habe nur keine Ahung wie ich das sinnvoll, d.h. ohne großen Programmieraufwand testen kann.
Evtl. hilft mein bisheriger Code zum Verständnis:
Code:
function add(varargin)
values = get(navlist,'Value');
dir_pick = fdir(values(1));
pick = dir_pick.name;
pick_full = fullfile(current_dir,pick);
% open *.mat file
pick = load(pick_full);
if ~isempty(pick) if isstruct(pick) % get struct fieldnames
fields = fieldnames(pick);
fs = [fs; ones(size(fields,1),1)];
for i = 1:size(fields,1) ifsize(getfield(pick,fields{i,1}),1) > 1 && size(getfield(pick,fields{i,1}),2) > 1 % is field an array? warndlg(['Unzulässiges Datenformat in ' fields{i,1}]) else
pick_full = fullfile(current_dir,dir_pick.name);
%dir_pick.name = pick_full;
if ~nodupes || ~any(strcmp(full_file_picks,pick_full))
file_picks{end + 1} = ['(' dir_pick.name ')' fields{i,1}]; %#ok<AGROW>
full_file_picks{end + 1} = [pick_full '(' fields{i,1} ')']; %#ok<AGROW>
dir_picks(end + 1) = dir_pick; %#ok<AGROW>
names{end + 1,1} = fields{i,1}; %#ok<AGROW>
end end end end else warndlg([dir_pick.name ' konnte nicht geladen werden']) end if show_full_path
set(pickslist,'String',full_file_picks,'Value',[]);
else set(pickslist,'String',file_picks,'Value',[]);
end set([removebut,moveupbut,movedownbut],'Enable','off');
set(Fs_file,'Enable','on','String','1') set(NumVal_file,'String',length(getfield(pick,names{1,1}))) %#ok<*GFLD>
end
welche so ja nicht wirklich funktioniert. Hat das Feld z.B. [1x11 cell], wobei sich in jeder Zelle ein Array/Matrix befindet, müsste man ja auch wieder alle Zellen überprüfen. Denn an sich ist das Format [1x11 cell] ja zulässig, so fern sich in jeder Zelle nur ein Zahlenwert befindet.
Verfasst am: 22.11.2015, 17:52
Titel: Re: ausgewählte *.mat Datei auf Format des Inhalts überpr
Hallo DSP,
Zitat:
Zulässig sind nur Arrays mit der Dimension [1xN] oder [Nx1]. Weitere Verschachtelung wie structs, cells etc innerhalb eines Feldes nicht zulässig.
[...]
Denn an sich ist das Format [1x11 cell] ja zulässig, so fern sich in jeder Zelle nur ein Zahlenwert befindet.
Sind Cells nun erlaubt oder nicht?
Den Code zum Überprüpfen des Inhalts kannst Du in eine Unterfunktion schreiben, die sich bei Bedarf (wenn also Cells erluabt wären) rekrusiv aufruft. Dann könnte dies helfen:
Danke für deine schnelle Antwort. Das zulässig von [1x11 cell] bezog sich lediglich auf size, welche ja per eigener Definition/Bedingung der if Anweisung richtig wäre. Aber ich halte mich mal an das sptool, wo lediglich 2D arrays vom Typ double erlaubt sind.
Daher nützt mir dein Vorschlag auch leider nichts, wobei ich beim Ausführen auch folgende Fehlermeldung erhalte.
Code:
Operands to the || and && operators must be convertible to logical scalar values.
Error in uipickfiles/add (line677)
C_isVector = (cellfun('prodofsize', C) == cellfun('length', C)) && ...
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.