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

zwei structs zusammenfügen

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.11.2014, 23:57     Titel: zwei structs zusammenfügen
  Antworten mit Zitat      
Hallo goMatlab Forum,

ich suche nach einer Möglichkeit mit der man 2 structs mit identischen Feldern zusammenfügen kann.

Code:

structA = struct('feld1',{'Text1';'Text2'},'feldXYZ',{'Text1';'Text2'});
structB = struct('feld1','Text3','feldXYZ','Text3');

% zusammenfügen von structA + B  wie folgt
structC = struct('feld1',{'Text1';'Text2';'Text3'},'feldXYZ',{'Text1';'Text2';'Text3'});
 


So funktioniert es jedenfalls nicht
Code:
structC = [structA ; structB];
structC = {structA ; structB};


Muss man hier tatsächlich die cellarrays für jedes Feld einzeln zusammenfügen oder gibt es doch eine Möglichkeit über die kompl. Struktur. Das mag für wenige Felder kein Problem sein, aber bei mehr als 10 ist es schon etwas umständlich. Oder kennt jemand eine effiziente Methode über die einzelnen Felder?

Danke für eure Hilfe! Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 00:01     Titel:
  Antworten mit Zitat      
Hallo,

wie wär's damit?
Code:
structA(end+1) = structB


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

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.11.2014, 00:42     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Hilfe. Tatsächlich funktioniert diese Lösung für mein gepostetes Bsp. Allerdings merkte ich jetzt erst, dass es nicht meinem eigentlichen Code entspricht. StructA habe ich so angelegt...

Code:

structA.feld1 = {'Text11';'Text12'};
structA.feldXYZ = {'Text21';'Text22'};
 


und structB wurde nach dem Einlesen aus einer Textdatei dann mittels

Code:
structB = cell2struct({'Text31';'Text32'},{'feld1','feldXYZ'},1);

erstellt. Ich hatte angenommen das wäre gleichwertig zum meinem oberen Bsp. Leider funktioniert deine Lösung für mein Problem nicht, da structB kein cell sondern string ist. Ich muss structA dann tatsächlich mittels struct Befehl erstellen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 01:25     Titel:
  Antworten mit Zitat      
Hallo,

ein Weg ohne Schleife fällt mir auf Anhieb nicht ein. Über die Felder iterieren sollte aber gehen:

Code:
fields = fieldnames(structA);
for I=1:numel(fields)
    structA.(fields{I}) = [structA.(fields{I}); structB.(fields{I})];
end


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

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.11.2014, 09:32     Titel:
  Antworten mit Zitat      
Vielen Dank Harald,

aber ich werde meinen Code umbauen und mittels struct dann die struct-arrays statt den Feld-arrays erstellen. Hat für mich den Vorteil, dass dann die Übergabe des structs für jedes n-te Element jedes Felds einfach wird.

Somit muss ich dann auch nicht mehr die structs zusammenfügen, sondern übergebe von der Funktion nur den n-ten struct Teil des struct arrays A oder wenn nötig gleich structB.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

alternativ kannst du meinen Vorschlag in eine kleine Funktion packen und bei Bedarf eben diese Funktion aufrufen.

Ich würde mir bei der Frage, wie die Daten organisiert werden sollen, vor allem überlegen, wie (außer hier) noch auf die Daten zugegriffen können werden soll.

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

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.11.2014, 10:09     Titel:
  Antworten mit Zitat      
Ja, das ist sicherlich richtig.

Auch wenn ich jetzt erstmal einiges umschreiben muss, hat der struct array doch sein Vorteile.

Ich habe in einen m-file mehrere structs, welche jeweils 5 Übersetzungen für jedes Feld enthalten. Wurde zum Bsp. in der GUI als Sprache Deutsch gewählt, gibt die Funktion den gewählten struct samt aller Übersetzungen zurück. Auf das jeweilige Feld mit dt. Übersetzung müsste ich dann immer explizit zugreifen.

Code:

langTyp = 1;
structTranslation.field(langTyp)
 


Der struct array hat nun den Vorteil, dass die Funktion dann nur noch den struct mit der gewünschten Übersetzung übergibt und ich mir den Zugriff ".field(langTyp)" in den anderen Funktionen sparen kann. Das spart natürlich auch Speicherplatz.

Nun gibt es noch die Funktion einer eigenen Übersetzung, welche aus einem Textfile gelesen wird. Bei meiner alten Methode musste ich die structs aneinanderhängen, daher auch meine Frage hier. Das kann ich mir nun sparen.

Auch wenn ich deine Vorschläge jetzt nicht umsetze, war der Thread dennoch sehr hilfreich. So wurde mir bewusst, dass der struct array hier die besser Lösung ist.

Danke und Gruß, DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht ist auch das interessant für dich:
http://blogs.mathworks.com/communit.....rnationalization-of-guis/

Grüße,
Harald
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.