Verfasst am: 16.05.2014, 01:52
Titel: List-Box mit Daten eines Cell Array aus *.mat - Datei fülle
Ich versuchs nochmal... Ich habe mat-files..... diese enthalten Daten und dazugehörige Variablennamen und sind als Cell Array im Cell Array...usw. gespeichert.
Ich kann mir derzeit die Datei laden, den fullpath in meiner Gui anzeigen lassen, die Variablennamen, die viel zu lang sind kürzen und in einem strctHndl einlesen.
Ich würde gerne die in meiner GUI enthaltene List-Box mit den VariablenNamen aus diesem strctHndl füllen, so dass ich diese auswählen kann und über einen plot später plotten kann.
Ich blicke aber beim Umgang mit der List-Box und der Verknüpfung von den Daten und Namen mit der List-Box nicht durch.
Die Hauptfragen die sich mir stellen sind:
Wie bekomme ich die Variablennamen die ich mir im strctHndl.variableName gespeichert habe in meiner Listbox angezeigt?
Wie weise ich richtig den Variablen ihre Werte zu und muss ich das überhaupt machen, da diese ja in der mat-file auch schon zusammengehörig abgespeichert waren???
Und wie spreche ich dann die Variable MIT ihren Daten für eine plot-funktion an???
Ich habe mit List-Boxen noch nichts gemacht und das Netz bringt mich in keinerlei Form weiter.....für kompetente Hilfe wäre ich sehr dankbar...
VG Nadja
....Code und Foto.....siehe unten...
Code:
[FileName,PathName] = uigetfile({'*.mat'; '*.*'},'Select the MATLAB code file');
if(FileName==0) %cancel is pressed
return;
end
% umschreiben in allgemeine structVariable dataContent
dataImport = load(fullfile(PathName,FileName)); % die *.mat-files enthalten u.a. Infos zum Namen und Daten in form eines 1x1001 double Vectors
Structname = fieldnames(dataImport);
dataContent = dataImport.(Structname{1}); % in dem cell to cell array dataContent sind nun die Daten der *.matfile gespeichert
ShowFileString = [PathName FileName]; %path and name
set(strctHndl.FileEdit,'String',ShowFileString) %shows directory string in GUI
% Zuweisung von den VariablenNamen aus den fields der Daten der *.mat-Datei
c = cell(1,length(dataContent.Y));
for j = (1:length(dataContent.Y))% Anzahl der Variablen (fields) in der *.mat-Datei
A(j) = cellstr(dataContent.Y(1,j).Name);
B(j) = regexp(A(j),'"/"','split'); % A ist ein Cell-string...aufsplitten in einzelne strings, Trennung bei /
% hier werden die VariablenNamen in gewünschte Form gebracht
a = B{1,j}{1,end-1};
b = B{1,j}{1,end};
c{j} = strcat(a,'/',b);
% und hier im handle als ein cellArray mit strings % abgespeichert
strctHndl.variableName{j} = regexprep(c{j},'"','');
% bis hierher funktioniert alles
% hier möchte ich die einzelnen strings in meine List-Box % der GUI (handlle = listBox) schreiben mithilfe der % Variable variable(j) - geht nicht
% und hier würde ich gerne die Daten die unter % dataContent.Y(1,j).Data(1, liegen den jeweiligen % Variablen zuordnen (muss ich das eigentlich wieder machen % oder werden die die ganze Zeit mitgeschlurft???
Wie weise ich richtig den Variablen ihre Werte zu und muss ich das überhaupt machen, da diese ja in der mat-file auch schon zusammengehörig abgespeichert waren???
verwenden. Wenn über die Listbox angegeben werden soll, welche Variablen aus der .mat-Datei geladen werden sollen, dann kann man abfragen, welche Einträge gerade ausgewählt sind und das mit an load übergeben.
Zitat:
Und wie spreche ich dann die Variable MIT ihren Daten für eine plot-funktion an???
Wenn es wie oben vorgeschlagen umgesetzt ist, dann mit
puh..... versuche das gerade nachzuvollziehen und glaube fast, dass das so bei mir nicht funktioniert mit dem was ich machen möchte...
Also ich benutze zwar den GUIDE, allerdings nicht die vorgegebene m.-file Struktur, sondern eine eigene m.-Funktion:
function NAME (action),
in welcher ein
switch (action) .... case 'Callback'....
eingebettet ist, womit die einzelnen, selber festgelegten Callbacks aus meinen Properties in der Gui angesprochen werden.
Der Code beruft sich auf meinen browse-Button, mit dem ich die mat-files lade.
Ich möchte das ganze auch gern dynamisch halten, so dass ich nicht mit load(mat-file-Daten) die Daten im Einzelfall laden möchte.
Ich möchte über die List-Box eine Auswahl an den Variablen der geladenen mat-file treffen können und dann über einen Plot-Button die entsprechende Variable als step-response plotten können...
danke für den ersten Tip! Das klappt schon mal supi, also die Namen tauchen in der List-Box auf..... Ich frage mich jetzt ob hinter den VariablenNamen noch meine Daten aus der m-File stecken oder ob durch die ganze Umwandlung der Cells und Strings die Daten jetzt separat angesprochen werden müssen???
Also ich würde jetzt gerne eine Variable auswählen können (case 'LISTBOX') und dann über den plot Button (case 'PLOT_STEP') meine plotfunktion ausführen können.
Vielleicht eine Idee wie ich die zu den Variablen zugehörigen Daten durch die Auswahl in der Listbox anspreche???
bringen mir die beiden letzten auskommentierten Zeilen in der for-Schleife überhaupt etwas, zwecks Datenzuweisung???
Vielen Dank schon mal!!!
Code:
% bis hierher funktioniert alles
% hier möchte ich die einzelnen strings in meine List-Box % der GUI (handle = listBox) schreiben % geht jetzt so, aber wie greife ich durch die Auswahl auf % die Daten zu??? set(strctHndl.listBox, 'String', strctHndl.variableName);
% und hier würde ich gerne die Daten die unter % dataContent.Y(1,j).Data(1, liegen den jeweiligen % Variablen zuordnen (muss ich das eigentlich wieder machen % oder werden die die ganze Zeit mitgeschlurft???
ich meinte an sich, dir alles mitgegeben zu haben.
Bei deinen Rückfragen komme ich nicht ganz klar. Bitte den relevanten Code posten, so dass auch klar ist, welche Variablen was beinhalten.
Am besten dann noch konkret auf die Vorschläge Bezug nehmen und sagen, was daran nicht funktioniert.
danke auch.....selber gelöst..... ListBox gibt einen Index als int Value zurück, je nachdem welche Position in der Liste man ausgewählt hat...
lässt sich dementsprechend gut mit der Laufvariable der Daten verknüpfen!
load(data) überflüssig.....hab ich ja schon zu Beginn des Codes, den ich ganz oben eingefügt hatte.
Gruß Nadja
Einstellungen und Berechtigungen
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.