Verfasst am: 11.06.2014, 14:52
Titel: struct per funktion auslesen
Hallo, ich habe folgendes Problem:
in einem größeren Programm wird eine Exceldatei ausgelesen und in einem struct abgelegt. Dabei handelt es sich ausnahmslos um Strings. Nun soll diese struct ausgelesen werden und die Unterpunkte sollen entsprechend den Oberpunkten zugeordnet werden. Das ganze hat bisher immer super funktioniert, soll nun aber OOP geschrieben werden. Wenn ich die Funktion nun aufrufe kommt nach dem ersten erfolgreichen durchlauf: Undefined function 'StructExploration' for input arguments of type 'struct'. Meine Funktion ist:
Code:
function[Nodes,Parents] = StructExploration(~, Struct, Nodes, Parent, Parents)
FieldNamesOfStruct=fieldnames(Struct);
for i=1:length(FieldNamesOfStruct)
Nodes=[Nodes; FieldNamesOfStruct(i), Parent];
if isstruct(Struct.(FieldNamesOfStruct{i}))
Parents=[Parents size(Nodes,1)];
[Nodes,Parents] = StructExploration(Struct.(FieldNamesOfStruct{i}), Nodes, size(Nodes,1), Parents);
end end end
Durch den Aufruf der Funktion innerhalb der Funktion geht er einfach eine Stufe tiefer und genau da kommt der Fehler. Ich bin mir sicher das der Fehler trivial ist, ich komme nur leider im Moment einfach nicht darauf
Das ist jetzt keine öffentliche Funktion mehr sondern eine Objektmethode, Objektmethoden werden immer aufgerufen indem man sie mit instanz.Funktionsname(...) aufruft wobei instanz die Variable ist in der das Objekt gespreichert ist. Dies gilt bei Matlab IMMER, auch wenn man sich gerade innerhalb einer Objektmethode befindet.
Code:
function[Nodes,Parents] = StructExploration(obj, Struct, Nodes, Parent, Parents)
FieldNamesOfStruct=fieldnames(Struct);
for i=1:length(FieldNamesOfStruct)
Nodes=[Nodes; FieldNamesOfStruct(i), Parent];
if isstruct(Struct.(FieldNamesOfStruct{i}))
Parents=[Parents size(Nodes,1)];
[Nodes,Parents] = obj.StructExploration(Struct.(FieldNamesOfStruct{i}), Nodes, size(Nodes,1), Parents);
end end end
Wie vermutlich schon bemerkt, bekommt jede Objektmethode das Objekt übergeben.
Weitergehend sieht es für mich so aus, als ob obige Funktion eigentlich eine Klassenmethode sein sollte, was in Matlab mit "Access=static" erfolgt. Der Aufruf ist dann mit Klassenname.Funktionsname möglich.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.06.2014, 10:50
Titel:
natürlich, manchmal kann man echt betriebsblind sein. vielen dank
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.