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

einzelne strings eines cell array auslesen

 

Nadja2005
Forum-Newbie

Forum-Newbie



Beiträge: 9
Anmeldedatum: 15.05.14
Wohnort: Köln
Version: ---
     Beitrag Verfasst am: 15.05.2014, 13:30     Titel: einzelne strings eines cell array auslesen
  Antworten mit Zitat      
Hallo und Hilfe, verzweifle grad..... der Plan lautet:

*.mat Datei einlesen - alle Daten in der Variablen dataContent speichern - ausgewählte File anzeigen lassen....

...klappt...

jetzt.... field names viel zu lang und von der Syntax etwa so
asd/fgh/hjk/klo/etwa
Ich möchte die Namen ändern...und zwar mir NUR die beiden letzten Stücke anzeigen lassen.
Versuche es mit regexp und bekomme den Namen auch aufgesplittet, aber raffe nicht wie ich mir nun die letzten beiden als neuen Namen anzeigen lassen kann....

Die mat.Dateien sind in ihrer Größe variabel und die Namen haben auch nicht immer dieselbe Anzahl von Slashes im Namen...
Die Namen möchte ich mir im Übrigen in einer Liste in meiner ui ausgeben lassen....

Hilfe??? .....bitte....?!

CodeSchnipsel siehe hier: (comments unwichtig)


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) );   %# pass file path as string
            Structname = fieldnames(dataImport);                %# in cell array werden die field Namen von data import gespeichert
            dataContent = dataImport.(Structname{1});           %# in data content wird nun der inhalt des structes bezüglich seines field Namens gespeichert!
           
            ShowFileString = [PathName FileName]; %path and name
            set(strctHndl.FileEdit,'String',ShowFileString) %shows directory string

           % assignin ('base', 'dataContent', dataContent)
%          % assignin ('base','FileName',FileName)
%          % assignin ('base','PathName',PathName)
%
%
%             %Variablen(Daten)-benennung
%             Discrete_Derivative_SampleTime = dataContent.Y(1,1).Data(1,Smile;
           
           
           
             
            A = cellstr(dataContent.Y(1,1).Name);
            B = regexp(A,'/','split');  %# A ist ein Cell-string...aufsplitten in einzelne strings, Trennung bei /
           
            n = length(B{1,1});
 


Ich wollt irgendwie mit n ....also der Länge meines Cell Arrays weiter machen.....aber klappt mal irgendwie gar nichts... Sad


Gruß Nadja....
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: 15.05.2014, 14:23     Titel:
  Antworten mit Zitat      
so, okay.....hab da ne Lösung....ist vielleicht nicht ganz so schön, aber geht....:

Code:

            %# select variable name from cell array field name
            A = cellstr(dataContent.Y(1,1).Name);
            B = regexp(A,'"/"','split');  %# A ist ein Cell-string...aufsplitten in einzelne strings, Trennung bei /
           
            n = length(B{1,1});
           
           
            a = B{1}{n-1};
            b = B{1}{n};
            c = strcat(a,'/',b);
            variableName = regexprep(c,'"','');
 


.....hat vielleicht jemand einen Tip für mich wie ich das in einer Schleige realisiere, um das für alle fieldNames durchzuführen? Und in welchem DateiTyp sind die dann gespeichert.......

und kann ich mit den Namen auch noch auf die dazugehörigen Daten aus der mat-Datei zugreifen??
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.05.2014, 14:38     Titel:
  Antworten mit Zitat      
Hallo

Du brauchst nicht die Länge des Cell zu kennen, den letzen Eintrag kannst mit "end"-Schlüsselwort erfragen

so vielleicht:
Code:


          %# select variable name from cell array field name
          A = cellstr(dataContent.Y(1,1).Name);
          B = regexp(A,'"/"','split');  %# A ist ein Cell-string...aufsplitten in einzelne strings, Trennung bei /
           
          c = cell(1,length(B) )
          for k=1:length(B)
              a = B{k}{end-1};
              b = B{k}{end};
              c{k} = strcat(a,'/',b);
             
          end
          variableName = regexprep(c,'"','');

 
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: 15.05.2014, 17:08     Titel:
  Antworten mit Zitat      
ahhh....vielen Dank.... das ist tatsächlich schöner!

Es funzt jetzt auch.....heißt ich schreibe mir gerade in einer for-Schleife ein 1x11 cell array mit meinen eigentlich gewollen Variablen-Namen rein....

Wenn ich nur jetzt versuche die Daten darauf zu schreiben, überschreibe ich andauernd den String mit den Daten....

Kann mir irgendjemand sagen, wie ich die 11 VariablenNamen (Strings im CellArray) jetzt in meine List-Box bekomme und ihnen bestenfalls auch noch x und y Werte zuweise damit ich mir den Schmarrn auswählen un plotten kann?!

Komm mir irgendwie grad echt blöd vor.....hab nicht mal ne Idee......und mathworks und der ganze Rest hilft auch iwie nicht weiter.... Sad

hier noch mal, was ich gerade tue....

Code:

%# 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 Varieblen (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 /
               
                   
                a = B{1,j}{1,end-1};
                b = B{1,j}{1,end};
                c{j} = strcat(a,'/',b);
                variableName{j} = regexprep(c{j},'"','');            
            end    
               

            %# get(strctHndl.variableName, 'Sting');
           
            %# Zuweisung der Daten zum dazugehörigen Variablennamen ....... das ist alles noch doof ;-)
           
           
%             for i = 1:length(dataContent.Y)
%                 [dataContent.Y(1,i).Data(1,Smile] = variableName{1,i};  
%             end
 


für Hilfe wäre ich euch echt dankbar..... liebsten...

Nadja
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.05.2014, 10:39     Titel:
  Antworten mit Zitat      
Hallo

Zitat:
Kann mir irgendjemand sagen, wie ich die 11 VariablenNamen (Strings im CellArray) jetzt in meine List-Box bekomme und ihnen bestenfalls auch noch x und y Werte zuweise damit ich mir den Schmarrn auswählen un plotten kann?!

Deine Fragen/ Problembeschreibung ist nicht klar, es ist immer gut anhand eines einfachen Beispiels das Problem zu beschreiben. Man sollte immer das Problem auf das Minimum reduzieren (auf mehrere Teilprobleme), dann wird auch etwas komplexes einfacher zu lösen.

Einträge in Listbox einzufügen ist nicht schwer, siehe hier:
http://www.gomatlab.de/eintraege-in-listbox-einfuegen-t1369.html

Ich würde wenn das die Variablen sind, dynamische Felder dazu verwenden, dann durchs Callback der Listbox auf diese Felder zugreifen und plotten

z.B:
Code:

VariableList = {'Plot1','Plot2'}
MeineDaten.Plot1.x =1:10
MeineDaten.Plot1.y =1:10

MeineDaten.Plot2.x =10:-1:1
MeineDaten.Plot2.y =1:10

h = uicontrol('style','listbox','units','pixel', ...
              'position',[20 340 100 50],...
'Callback', 'plot(MeineDaten.(VariableList{get(h,''Value'')}).x , MeineDaten.(VariableList{get(h,''Value'')}).y)')

set(h,'String', VariableList )


 



PS: ich habe hier den Callback in einer Zeile gemacht, mach es bei dir besser in einer Funktion
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.