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

Erste Ebene einer Struktur löschen?

 

peter12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2010, 14:41     Titel: Erste Ebene einer Struktur löschen?
  Antworten mit Zitat      
Hallo,

wie kann ich die erste Ebene einer Struktur löschen? Folgendes Beispiel:

Code:
Test1.Test2.Test3 = 2;


Nun möchte ich aber "Test1" löschen, sodass nur noch:

Code:
Test2.Test3 = 2


dasteht. Gibt es dafür einen Befehl?

Danke...

ciao Peter


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2010, 15:21     Titel:
  Antworten mit Zitat      
Hallo

mach doch so
Code:

Test2=Test1.Test2
clear Test1
 
Private Nachricht senden Benutzer-Profile anzeigen
 
peter12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2010, 16:02     Titel:
  Antworten mit Zitat      
Ja ok...das wäre ne Möglichkeit. Funktioniert aber nur, wenn es nicht mehr als eine Unterstruktur gibt. Was ist aber nun bei folgenden Beispiel:

Code:
test1.test1.test1 = 2;
test1.test2.test1 = 3;
test1.test3.test1 = 4;


Jetzt habe ich EINE Struktur mit drei Unterstrukturen. Nun will ich aber diese 3 Unterstruktur zu jeweils eigenständigen Struktur machen, ebend die erste Ebene löschen...Gibts dafür ne Möglichkeit?

Ziel:

Code:
test1.test1 = 2;
test2.test1 = 3;
test3.test1 = 4;
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2010, 16:35     Titel:
  Antworten mit Zitat      
Hallo

1) mit Befehl FIELDNAMES Felder rauslesen


2) in der Schleife EVAL nutzen,

so in etwa:
Code:

test1.test1.test1 = 2;
test1.test2.test1 = 3;
test1.test3.test1 = 4;
% Feldnamen holden
f_names = fieldnames(test1);
s       = test1;
clear test1;
for f = 1:length(f_names)
   % über dynamische Felder s.(Feldname)
    % auf Wert zugreifen
   str =sprintf('%s = s.%s;\n',f_names{f},f_names{f});
   eval(str);
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: 17.07.2010, 16:37     Titel:
  Antworten mit Zitat      
Hallo Peter,

Code:
test1.test1.test1 = 2;
test1.test2.test1 = 3;
test1.test3.test1 = 4;


Ziel:
Code:
test1.test1 = 2;
test2.test1 = 3;
test3.test1 = 4;


Nein, es gibt keine direkte Möglichkeit dafür. Aber Du kannst eine programmieren. Allerdings ist die automatische Erzeugung von Variablen wie immer fehlerträchtig und schwer zu debuggen, z.B. wenn Dein Struct so aussieht: "A.if.Field". Deshalb würde ich dies niemals implementieren. Aber gehen könnte es so:
Code:
function AssignFields(S)
Field = fieldnames(S);
for iField = 1:length(Field)
   assignin('caller', Field{iField}, S.(Field{iField}));
end

ASSIGNIN ist grundsätzlich harmloser und schneller als EVAL, weil zumindest nur Variablen belegt werden, während EVAL allen möglichen Code ausführt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
peter12345

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2010, 18:35     Titel:
  Antworten mit Zitat      
OK...ist vielleicht doch zu umständlich...wozu ich das eigentlich brauch:

(Vielleicht gibts dafür ja ne bessere Lösung)

Dieselbe Struktur wie oben:

Code:
test1.test1.test1 = 2;
test1.test2.test1 = 3;
test1.test3.test1 = 4;


Nun will ich in eine Datei Test.mat alles speichern was in der Struktur Test1. Das heißt, wenn ich Test.mat lade soll sich im WS folgendes Bild ergeben:

Code:
test1
test2
test3


Die erste Ebene soll quasi nicht mitgespeichert werden, weil sie überflüssig ist und in der weiteren Verarbeitung der Daten Fehler erzeugen würde.

Danke für eure Hilfe...
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2010, 19:31     Titel:
  Antworten mit Zitat      
Ja, muss du aber trotzdem vor dem Speichern die Schritte von obigen Beispielen ausführen,

Du muss Struktur wie ein Baum anschauen. Die Ebene, die du entfernen möchtest, ist die Wurzel des Baumes. Und der Baum ohne Wurzel kann nicht existieren. So ist es auch bei Struktur. Wenn du untere Elemente haben möchtest, muss du diese vorher extrahieren.
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: 17.07.2010, 22:53     Titel:
  Antworten mit Zitat      
Hallo Peter,

Du kannst SAVE mit dem Flag "-struct" aufrufen. Siehe "help save".

Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.07.2010, 17:39     Titel:
  Antworten mit Zitat      
Stimmt,
Jan hat recht, SAVE bietet Option um Feldnamen aus Struktur zu speichern.
Da muss ich mal auch in der Hilfe nachschauen

Danke Jan, hab auch was gelernt
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.