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

Cell Arrey in entsprechendes Struct umwandeln

 

metalphony
Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 22.04.2015, 18:12     Titel: Cell Arrey in entsprechendes Struct umwandeln
  Antworten mit Zitat      
Hi, ich habe Cell arrey mit Structs.
In den Structs ist ein Field mit einem Vektor hinterlegt (siehe Bilder).
Nun muss ich für meine weitere Verarbeitung aus dem Cell Arrey ein Struct mit den entsprechenden Namen (fields) und Werten (values) machen und weiß nicht so ganz wie ich das angehen soll.
Das Cell Arrey erstelle ich mit einer for-Schleife:
Code:
Messung{j,1} = struct(var_name_neu{j},value1);


Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.04.2015, 18:16     Titel:
  Antworten mit Zitat      
ich verstehe noch nicht ganz wie das gewünschte ergebniss aussehen soll... kannst du minimalbeispiele geben ?
warum erstellst du die daten nicht gleich so wie du sie später brauchst ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 22.04.2015, 20:05     Titel:
  Antworten mit Zitat      
sorry. Hab vergessen die Bilder anzuhängen Embarassed
Morgen früh dann...
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.04.2015, 20:10     Titel:
  Antworten mit Zitat      
bitte keiner bilder.... code beispiele. alles was in matlab passiert sollte sich mit code reproduzieren lassen. bei bildern muss man das dann abtippen und selber das beispiel zusammen basteln um dann damit rumzuspielen. das ist sehr viel aufwand.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 23.04.2015, 07:42     Titel:
  Antworten mit Zitat      
Ok. Also das ist mein bisheriger Code:

Code:

[path] = uigetdir;
data = what(path);
n = length(data.mat);
cd(path);

for i=1:n

load(data.mat{i});    
workspace = who;
variable = workspace{1};
k = length(variable);

% neuer_name = vector_name(findstr(vector_name,'M'):end);
%
% %clearvars -except [path] data n
%
% load(data.mat{i})



if k==39;
   
%load(data.mat{i});

workspaceinhalt = who;

m = length(who);

for j=1:m-9;


var_umbenennung =  genvarname(workspaceinhalt{j});
var_name_neu{j} = var_umbenennung(24:end);

%Messung{j}=evalin('base',[workspaceinhalt{j}]);
%Messung{j}=evalin('base','var_name_neu' = 0')
%var_name_neu{j}= evalin('base',[workspaceinhalt{j}]);


%k=evalin('base',[workspaceinhalt{j}]);
%clear workspaceinhalt{j}
%eval( [[var_name_neu] '= k'] )

%eval( [[var_name_neu] '= 1'] )

value1=evalin('base',[workspaceinhalt{j}]);
Messung{j,1} = struct(var_name_neu{j},value1);
 
end



end



end
[/
code]

Wie ich oben schon geschrieben habe, brauche ich als Ergebnis ein Struct und nicht wie es jetzt ist eine Cell Arrey weches Structs enthält. Aufgrund der dynamischen Namensvergabe lässt sich wohl auch die eval und evalin Funktion nicht vermeiden.
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 23.04.2015, 10:04     Titel:
  Antworten mit Zitat      
Hat sich nun erledigt. Hier wäre der fertige Code:

Code:

[path] = uigetdir;
data = what(path);
n = length(data.mat);
cd(path);

for i=1:n

    load(data.mat{i});    
    workspace = who;
    variable = workspace{1};
    k = length(variable);

    % neuer_name = vector_name(findstr(vector_name,'M'):end);
    %
    % %clearvars -except [path] data n
    %
    % load(data.mat{i})



    if k==39;

    %load(data.mat{i});

    workspaceinhalt = who;

    m = length(who);

for j=1:m-9;


        var_umbenennung =  genvarname(workspaceinhalt{j});
        var_name_neu{j} = var_umbenennung(24:end);

        %Messung{j}=evalin('base',[workspaceinhalt{j}]);
        %Messung{j}=evalin('base','var_name_neu' = 0')
        %var_name_neu{j}= evalin('base',[workspaceinhalt{j}]);


        %k=evalin('base',[workspaceinhalt{j}]);
        %clear workspaceinhalt{j}
        %eval( [[var_name_neu] '= k'] )

        %eval( [[var_name_neu] '= 1'] )

        value1=evalin('base',[workspaceinhalt{j}]);
        %Messung{j,1} = struct(var_name_neu{j},value1);
        Messung.(var_name_neu{j})=value1;
 
end



end


%save('Test.mat','-struct','Messung')




end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.04.2015, 16:11     Titel:
  Antworten mit Zitat      
Hallo metalphony,

Der Code ist sehr wackelig und er wird bei kleinsten Änderungen zu schrägen Bugs führen. Hier ein paar Kommentare:
Code:

[path] = uigetdir;  % Auf keinen Fall den wichtigen Befehl PATH überschreiben!
% Das läuft zwar erstmal, aber wenn Du das debugst, kann das extrem verwirrend werden. "folder" ist sicherer.

data = what(path);
% Das ist ziemlich indirekt. Wie wäre es mit:
fileList = dir(fullfile(folder, '*.mat'));

% n = length(data.mat);
n = length(fileList);

cd(path);  % Den Working-Folder dynamisch zu ändern ist
% eine weit verbreitete Fehler-Quelle. Was passiert, wenn ein GUI
% oder eine Unterfunktion auch CD einsetzt? Nutze lieber absolute
% Pfadnamen.

for i=1:n
    load(data.mat{i});    % LOAD ohne Outputs ist kaum nachvollziehbar.
    % Statt die Werte direkt in den Workspace zu schreiben wäre es viel
    % einfacher wie oben vorgeschlagen die Outputs in ein Struct zu
    % schreiben:
    S = load(folder, fileList(i).name);
    variable = fieldnames(S);

    % workspace = who;
    % variable = workspace{1};
    % k = length(variable);

    % neuer_name = vector_name(findstr(vector_name,'M'):end);
    %
    % %clearvars -except [path] data n
    %
    % load(data.mat{i})
    % Hier mit den Variablen im Workspace herum zu spielen ist sehr
    % tükisch. Immerhin benötigst Du ja auch i usw.


    if k==39;  % Das Programm läuft nur, wenn genau 39 Variablen im
    % Workspace stehen? Wenn Du ganz am Anfang also "x = 1" schreibst
    % scheitert es hier ohne erkennbaren Zusammenhang? Niemals machen!

    %load(data.mat{i});

    workspaceinhalt = who;

    m = length(who);

for j=1:m-9;
      %  var_umbenennung =  genvarname(workspaceinhalt{j});
      % Kann der Namen einer Variablen aus dem Workspace ungültig sein?!
      % Dann ist auch genvarname unnötig.

        var_name_neu{j} = var_umbenennung(24:end);
 

Das File also per "S = load()" zu laden und nur die Namen per FIELDNAMES als Cell-String zu ändern und danach mit CELL2STRUCT wieder ein neues Struct zu erzeugen, ist viel sicherer, einfacher, schneller und stabiler. Zum Schluss wird es mit "save(FileName, S, '-struct')" gespeichert.

Gruß, Jan
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 - 2025 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.