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

Table Daten in Cell-Array einfügen

 

punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.08.2016, 13:24     Titel: Table Daten in Cell-Array einfügen
  Antworten mit Zitat      
Ich möchte Daten aus einer Variabel (table) in einem Feld eines Cell-Array übernehmen, dabei soll die Daten eine genaue Struktur haben.
Grund: Struktur der Felder soll immer gleich sein und das ist für den Export in einem XML-File wichtig.

Daten die ich übertragen möchte - siehe Anhang: Datenquelle_Tabelle.jpg

Wenn ich den Programm-Code so schreibe:
Code:

  NewOutputCount = length(OutputAttributes.Names);
  for ActNewOutput=1:NewOutputCount
    LastAlgoData.XMLData.outputs(ActNewOutput).name   =                 ...
                                  OutputAttributes.Names(ActNewOutput);
    LastAlgoData.XMLData.outputs(ActNewOutput).base   =                 ...
                                  OutputAttributes.Bases(ActNewOutput);
    LastAlgoData.XMLData.outputs(ActNewOutput).offset =                 ...
                                  OutputAttributes.Offsets(ActNewOutput);
  end
 


bekomme ich das richtige Ergebnis (siehe Anhang Ergebnis_richtig.jpg).

Nun würde ich, aber gerne ohne for-schleife auskommen:
Code:

  LastAlgoData.XMLData.outputs.name   = OutputAttributes.Names;
  LastAlgoData.XMLData.outputs.base   = OutputAttributes.Bases;
  LastAlgoData.XMLData.outputs.offset = OutputAttributes.Offsets;
 


dann bekomme ich aber nicht die richtige Struktur (siehe anhang Ergebnis-so_nicht.jpg).

Andere Versuche, wie z.B.:
Code:

LastAlgoData.XMLData.outputs.name = cell2struct(OutputAttributes.Names', 'name', 1);
LastAlgoData.XMLData.outputs.base = cell2struct(OutputAttributes.Bases', 'base', 1);
 


führen auch nicht zum erwünschten Ergebnis.

Jemand eine Idee wie ich das bewerkstelligen kann?
Danke schon mal im vorraus.

Datenquelle_Tabelle.jpg
 Beschreibung:
Daten die Übertragen werden sollen.

Download
 Dateiname:  Datenquelle_Tabelle.jpg
 Dateigröße:  31.63 KB
 Heruntergeladen:  237 mal
Ergebnis_richtig.jpg
 Beschreibung:
Ergebnis im Cell-Array wie es sein soll.

Download
 Dateiname:  Ergebnis_richtig.jpg
 Dateigröße:  34.81 KB
 Heruntergeladen:  251 mal
Ergebnis_nicht_so.jpg
 Beschreibung:
Ergebnis im Cell-Array wie ich es nicht haben will.

Download
 Dateiname:  Ergebnis_nicht_so.jpg
 Dateigröße:  39.18 KB
 Heruntergeladen:  245 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2016, 13:46     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit:

Code:
T = OutputAttributes; %falls OutputAttributes erhalten bleiben soll, ansonsten kann man direkt damit weiterarbeiten
T.Properties.VariableNames = {'name', 'base', 'offset'};
T = table2struct(T)';
LastAlgoData.XMLData.outputs = T;


Bitte Daten immer als Code oder .mat zur Verfügung stellen. Es erleichtert das Experimentieren sehr, wenn man nicht erst die Daten erzeugen muss.

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

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.08.2016, 14:11     Titel:
  Antworten mit Zitat      
Vielen Dank schon mal, sieht so weit ganz gut aus. Smile

Kleiner Unterschied ist, dass die Feldinhalte im Orginal als Cell-Array gespeichert werden - zu erkennen am {} im Feldnamen -, aber vielleicht ist das für den XML-Export unwichtig (schaffe ich heute nicht mehr zu prüfen).

Mit den .mat-Files hast du natürlich recht, da habe ich nicht nachgedacht, werde ich dann für die Zukunft berücksichtigen. Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2016, 14:15     Titel:
  Antworten mit Zitat      
Hallo,

das wundert mich. Ich habe mit isequal die beiden Ansätze verglichen und da kam true heraus. Dann bitte vielleicht nochmal ein Beispiel mit beiden Ansätzen zeigen (und direkt ladbaren Daten :P).

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

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 25.08.2016, 14:42     Titel:
  Antworten mit Zitat      
Moin,

hier mal der Test:

Code:

function testfunction(OutputAttributes)

  % Variante A:
%   VarianteA = LastAlgoData;
%   VarianteB = LastAlgoData;
  VarianteA = cell.empty;
  VarianteB = cell.empty;
  T = OutputAttributes;
  T.Properties.VariableNames = {'name', 'base', 'offset'};
  T = table2struct(T)';
  VarianteA.XMLData.outputs = T;
 
  % Variante B:
  % Daten übernehmen
  NewOutputCount = length(OutputAttributes.Names);
  for ActNewOutput=1:NewOutputCount
    VarianteB.XMLData.outputs(ActNewOutput).name   =                 ...
                                  OutputAttributes.Names(ActNewOutput);
    VarianteB.XMLData.outputs(ActNewOutput).base   =                 ...
                                  OutputAttributes.Bases(ActNewOutput);
    VarianteB.XMLData.outputs(ActNewOutput).offset =                 ...
                                  OutputAttributes.Offsets(ActNewOutput);
  end
  isequal(VarianteA,VarianteB)

end
 


Ausgabe:
Code:

K>> testfunction(OutputAttributes)

ans =

     0
 


Schönen Gruß
Lars

matlab.mat
 Beschreibung:
Tabelle der Daten 'OutputAttributes'

Download
 Dateiname:  matlab.mat
 Dateigröße:  788 Bytes
 Heruntergeladen:  199 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.08.2016, 07:45     Titel:
  Antworten mit Zitat      
Hallo,

diese Umwandlung nach table2struct hilft:
Code:
 T = arrayfun(@(x1) structfun(@(x2) {x2}, x1, 'UniformOutput', false), T);

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

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 26.08.2016, 12:44     Titel:
  Antworten mit Zitat      
Hervorragend, Harald Exclamation

Gruß und schönes Wochende
Lars

P.S.: Ich tue mich noch etwas schwer mit dem Umgang von cellfun, structfun, inline-functions, usw., habe mich aber - dank diesem Forum - schon etwas weiterentwickelt. Smile
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.