Der PropertyName ist der Feldname der Struktur. Wenn du also den Wert von Bild haben willst, musst du nur das entsprechende Feld der Struktur ansprechen: prop.Bild
Die Funktion parsepropval vergleicht varargin mit den Feldnamen "PropertyName" des structs "mystruct". Ist der string "PropertyName" auch ein Feld in dem struct, wird der Wert des Paares zugewiesen. Du kannst also vor dem Aufruf der Funktion parsepropval, beliebig Felder hinzufügen. Der Name des Feldes ist dann gleichbedeutend mit dem Namen des Wertepaares von varargin.
Danke für den Zusatzhinweis. Eine klitzekleine Frage hätte ich allerdings noch.
Um meine Bilder aufzurufen, habe ich meinen Programminhalt in die oberste Funktion reingepackt. Über eine if-Bed. habe ich versucht die einzelnen Bilder nach Belieben aufzurufen.
Code:
if prop.Bild == 1
.
.
.
elseif prop.Bild == 3
fig3=figure(3);
plot(MP{prop.Messpunkt}(1:length(MP{prop.Messpunkt})),'color',prop.Farbe,'linewidth',prop.Linienbreite);% <= Hier liegt das Problem
Name_Bild_3=prop.Messpunkt;
Title_Bild_3=num2str(Name_Bild_3);
title(['Zeit-Druck-Verlauf, Messpunkt: ', Title_Bild_3]) xlabel('Zeiteinheiten') ylabel('Druck') grid on
axis tight
end
Wenn ich nun Farbe und Linienbreite benutze, klappt alles super. Falls nicht, zeigt der logischerweise einen Fehler an, da 'color' und 'linewidth' da stehen aber nicht verwendet werden. Über weitere if-Bed. wäre das zu handhaben, aber nur unter einem riesigen Aufwand möglich.
Kann es eventuell sein, das der Programminhalt in die Unterfunktion gehört?
Welche Unterfunktion? Wenn du Felder des structs im deinem weiteren Code verwendest, die nicht in varargin enthalten sind, musst du sie logischerweise vorher irgendwie mit einem Default initialisieren.
hab noch ne Frage zu deinem letzten Beitrag. Kannst du mir erklären was die Default-Werte machen? Also es scheint ja, nun beliebig zu sein, ob ich bestimmte Parameter nutze oder nicht. Falls ich sie nutze wird der Default-Wert überschrieben. Was genau passiert denn, falls ich sie nicht benutze?
Ist prop.Linienbreite nun kein input argument deiner Funktion und auch sonst nirgends im Code initialisiert, gibt es eine Fehlermeldung. Daher mein Vorschlag zu den verwendeten Eigenschaften/Feldern der Struktur defaults anzulegen. Der default Wert wird überschrieben, so fern das entsprechende input argument vorhanden ist. Der string 'default' ist natürlich in meinem Bsp. nur ein Platzhalter. Bei Linienbreite wäre natürlich eine Zahl als default sinnvoll.
ok, Danke, hab verstanden. Um nochmal ganz kurz auf dein Anfangsbeispiel zurück zu kommen.
Ich habe den Inhalt der Unterfunktion match_property in die Unterfunktion parsepropval rein gepackt, um die Übersicht etwas zu verbessern. Klappt auch ganz gut.
Was ich allerdings in der Unterfunktion parsepropval nicht ganz verstehe ist, was der Kopf der while schleife macht. Man definiert zunächst die Variable arg_index=1. Anschließend sagt man im Kopf der while-Schleife:
Aber mein length(varargin) ist doch immer größer gleich 1, da ich ja etwas eingebe. Und falls ich nichts eingebe zeigt der mir natürlich auch nichts an.
solche Fragen lassen sich am einfachsten mit dem Debugger klären. Breakpoint in gewünscht Codezeile setzen und Programm bis zum Breakpoint laufen lassen. Dann im Schrittmodus weiter und die Variablen konnen im Workspace überprüft werden. Die while Schleife wird nur ausgeführt, wenn varargin mindestens 1 Argument enthält. Allerdings sollten es ja immer Paare sein, so dass solch ein Aufruf logischerweise eine Fehlermeldung erzeugt.
Wenn du nichts übergibst, werden dann auch folgerichtig die Defaults des structs verwendet so fern sie definiert sind.
Wenn die Eigenschaft nicht bekannt ist, wird jetzt im command window eine Fehlermeldung ausgegeben. Du kannst auch z.B. statt
disp
einen
errordlg
nutzen.
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.