WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

List-Box mit Daten eines Cell Array aus *.mat - Datei fülle

 

Nadja2005
Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.05.14
Wohnort: Köln
Version: ---
     Beitrag Verfasst am: 16.05.2014, 01:52     Titel: List-Box mit Daten eines Cell Array aus *.mat - Datei fülle
  Antworten mit Zitat      
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??? Question Question Question

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

%          % assignin ('base', 'dataContent', dataContent)
%          % assignin ('base','FileName',FileName)
%          % assignin ('base','PathName',PathName)

           
            % 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 Sad
               
                variable(j) = strctHndl.variableName{1,j};
                set(listBox, 'String', variable(j));
               
                % und hier würde ich gerne die Daten die unter
                % dataContent.Y(1,j).Data(1,Smile liegen den jeweiligen
                % Variablen zuordnen (muss ich das eigentlich wieder machen
                % oder werden die die ganze Zeit mitgeschlurft???
               
                numericCells{j} = dataContent.Y(1,j).Data(1,:);
                numericVector(j) = cell2mat(numericCells{j});
                               
            end    
               
                guidata(listBox, strctHndl);
 


strctHndl.variableNamen.jpg
 Beschreibung:

Download
 Dateiname:  strctHndl.variableNamen.jpg
 Dateigröße:  108.96 KB
 Heruntergeladen:  445 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.05.2014, 09:20     Titel:
  Antworten mit Zitat      
Hallo,

schreibst du Oberfläche mit uicontrol-Befehlen oder mit GUIDE?

Zitat:
Wie bekomme ich die Variablennamen die ich mir im strctHndl.variableName gespeichert habe in meiner Listbox angezeigt?

Wenn strctHndl.variableName ein Cell Array von Strings ist, dann mit
Code:
set(listBox, 'String', strctHndl.variableName);

Ansonsten muss man das entsprechend umwandeln.

Zitat:
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???

Ich würde
Code:

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
Code:
data.(variablenname)


Zitat:
muss ich das eigentlich wieder machen oder werden die die ganze Zeit mitgeschlurft???

Wenn die Einträge der Listbox aktualisiert werden sollen, muss das wie oben gezeigt explizit gemacht werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nadja2005
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.05.14
Wohnort: Köln
Version: ---
     Beitrag Verfasst am: 16.05.2014, 10:05     Titel:
  Antworten mit Zitat      
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!!! Wink

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,Smile liegen den jeweiligen
                % Variablen zuordnen (muss ich das eigentlich wieder machen
                % oder werden die die ganze Zeit mitgeschlurft???
               
%                 numericCells{j} = dataContent.Y(1,j).Data(1,Smile;
%                 numericVector(j) = cell2mat(numericCells{j});
                               
            end    
 


gui_screenshot.jpg
 Beschreibung:

Download
 Dateiname:  gui_screenshot.jpg
 Dateigröße:  64.86 KB
 Heruntergeladen:  433 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nadja2005
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.05.14
Wohnort: Köln
Version: ---
     Beitrag Verfasst am: 16.05.2014, 11:42     Titel:
  Antworten mit Zitat      
also ich möchte aus meiner mat-Datei aus dem cell-array mit den verschiedenen Variablen nach anklicken der Variable in der ListBox jeweils

Code:

dataContent.Y(1,j).Data
dataContent.X.Data
 


ansprechen.... (X-werte sind dabei immer gleich und Zeitvektoren, Y-Werte natürlich verschieden)

Wie kriege ich das hin, dass ich die jeweiligen Werte (das laufende "j") im Y-Vektor mit dem dazugehörigen VariablenNamen verknüpfe und anspreche???

hmmmm........... Question Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.05.2014, 15:26     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nadja2005
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.05.14
Wohnort: Köln
Version: ---
     Beitrag Verfasst am: 17.05.2014, 14:12     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.