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

Dynamisches füllen einer Struktur

 

Localhorst
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2008, 14:22     Titel: Dynamisches füllen einer Struktur
  Antworten mit Zitat      
Hallo Forum,

ich lese ein XML File ein und möchte nun Teile daraus ein einem struct() speichern. Leider komme ich nicht wirklich weit, bzw, überschreibe meine Daten immer wieder...

Code:

for(anz_struc=1:tree.ATTRIBUTE.numStructures)
    trace_name=tree.Structure(1,anz_struc).ATTRIBUTE.name;
    points=struct(trace_name,[tree.Structure(1,anz_struc).Trace.Point(1,:).CONTENT;]);
end


Ich möchte gerne eine Struktur haben mit dem Namen points, diese soll dann eine jeweils verschiedene Anzahl von Zellen haben. Die Zellen sollen jeweils den Namen trace_name aus dem Script haben und den ZeilenVektor [tree.Structure(1,anz_struc).Trace.Point(1,Smile.CONTENT;] enthalten.

Leider Überschreibe ich mir meine Daten immer, ich hoffte da durch, dass trace_name bei jedem Durchlauf anders ist, wird automatisch eine neue Zeile in der Struktur angelegt.

Über etwas Hilfe und Aufklärung würde ich mich sehr freuen.


MfG
Localhorst


EDIT:
Hier noch einmal das struct nach dem Auslesen der XML Datei

Code:
gen_object_display(tree)
     ParentId: 'unknown'
    Structure: [1x4 struct]
                   Trace: [1x1 struct]
                              Point: [1x27 struct]
                                       CONTENT: [4446  3331]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [0]

                                       CONTENT: [4311  3326]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [1]

                                       
.............

                                       CONTENT: [4472  3329]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [26]

                          ATTRIBUTE: [1x1 struct]
                                         color: [-65536]
                                     numPoints: [27]
                                       traceID: [1]
               ATTRIBUTE: [1x1 struct]
                                color: [-16711936]
                                 name: 'ba10_r_onlyinner'
                            numTraces: [1]
                          structureID: [0]

                   Trace: [1x1 struct]
                              Point: [1x21 struct]
                                       CONTENT: [4323  3377]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [0]

                                       CONTENT: [4272  3384]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [1]

............

                                       CONTENT: [4354  3376]
                                     ATTRIBUTE: [1x1 struct]
                                                num: [20]

                          ATTRIBUTE: [1x1 struct]
                                         color: [-256]
                                     numPoints: [21]
                                       traceID: [1]
               ATTRIBUTE: [1x1 struct]
                                color: [-256]
                                 name: 'ba10_r_onlyouter'
                            numTraces: [1]
                          structureID: [1]
 

Ich möchte gerne die Werte aus CONTENT in TRACE in Point in meinem neuen struct haben und das jeweils mit dem Namen aus tree.Structure(1,anz_struc).ATTRIBUTE.name;


Ich hoffe mein Edit war eine Hilfe und hat nicht mehr Chaos als davor verursacht.

MFG
Localhorst
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.08.2008, 15:03     Titel:
  Antworten mit Zitat      
Hallo Localhorst,

Strukturen und ihre Felder kann man auch anders anlegen als mit struct. Dann kann man auch gut die dynamischen Feldnamen verwenden. das sieht dann so aus:

Code:
for anz_struc=1:tree.ATTRIBUTE.numStructures
    trace_name=tree.Structure(1,anz_struc).ATTRIBUTE.name;
    points.(trace_name)=tree.Structure(1,anz_struc).Trace.Point(1,:).CONTENT;
end


Das wesentliche ist also

Code:
points.(trace_name) = ...
% statt
points = ...


Bei letzterem wird tatsächlich points ganz neu angelegt und vorherige Inhalte werden überschrieben.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Localhorst
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2008, 15:23     Titel:
  Antworten mit Zitat      
Vielen Dank,

diesen Schritt habe ich auch gerade über einen Artikel Use Dynamic Field References bei Mathworks gefunden.

Damit klappt es natürlich auch, leider habe ich in einem weiteren Schritt gesehen, dass eine weitere Schleife von nöten ist, da es noch einen Knoten in der XML Datei geben kann.

Da hier nun eine numerische Benennung am besten wäre, habe ich dieses probiert, was Matlab aber nicht zu lässt.

Code:
for(anz_struc=1:tree.ATTRIBUTE.numStructures)
    trace_name=tree.Structure(1,anz_struc).ATTRIBUTE.name;
    for(anz_trace=1:tree.Structure(1,anz_struc).ATTRIBUTE.numTraces)
        anz_trace_char=num2str(anz_trace);
    points.(trace_name).(anz_trace_char)=[tree.Structure(1,anz_struc).Trace(1,anz_trace).Point(1,:).CONTENT;];
    end
end


Von der Schreibweise gleich, aber die Benennung points.name.1 ist nicht erlaubt, eine Idee, wie ich das noch umgehen kann?

MFG
Localhorst
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.08.2008, 16:39     Titel:
  Antworten mit Zitat      
Hallo Localhorst,

wenn Du nur Zahlen hast, sind cells wieder einfacher als structs:

Code:
for anz_struc=1:tree.ATTRIBUTE.numStructures
    trace_name=tree.Structure(1,anz_struc).ATTRIBUTE.name;
    for anz_trace=1:tree.Structure(1,anz_struc).ATTRIBUTE.numTraces
       
        points.(trace_name){anz_trace}=tree.Structure(1,anz_struc) ...
    end
end


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Localhorst
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2008, 17:02     Titel:
  Antworten mit Zitat      
Vielen Dank!!!!

Genau da wollte ich hin!!!!

Herzliche Grüße
Localhorst
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.