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:
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 ?
_________________
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.
_________________
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.
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'));
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);
% 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!
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.
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
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.