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

Clear all in Funktionen

 

Lokdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 12.05.2016, 08:30     Titel: Clear all in Funktionen
  Antworten mit Zitat      
Hallo,

ich möchte nach beenden meiner "Hauptfunktion", meinen allgemeinen Workspace clearen.
Ich weiß, das jede Funktion ihren eigenen Workspace hat. Somit funktioniert der Befehl clear all in der Funktion nicht.
Wie sag ich nun meiner Funktion, dass ich meinen Hauptworkspace gecleared haben möchte?

Gruß und Danke
Private Nachricht senden Benutzer-Profile anzeigen


Lokdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 12.05.2016, 08:33     Titel:
  Antworten mit Zitat      
Habe selbst die Antwort gefunden:


Code:

function[] = test()
close all;
 evalin('caller','clear all');
 clc
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 12.05.2016, 09:00     Titel: Re: Clear all in Funktionen
  Antworten mit Zitat      
Lokdog hat Folgendes geschrieben:
ich möchte nach beenden meiner "Hauptfunktion", meinen allgemeinen Workspace clearen.


Dann sollte es mMn nach reichen, wenn du clear variables nutzt.
Denn clear all ist mit Kanonen auf Spatzen schießen, da alles inkl. Funktionen, Breakpoints, etc. gelöscht wird.

Schau mal in der Matlab Hilfe unter dem Punkt itemtype nach:
http://de.mathworks.com/help/matlab/ref/clear.html
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))

Zuletzt bearbeitet von Mmmartina am 12.05.2016, 09:52, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich frage mich, warum das überhaupt notwendig ist.
Vielleicht sollte man da auch die Programmstruktur insgesamt überdenken.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 12.05.2016, 09:53     Titel:
  Antworten mit Zitat      
Das stimmt Harald, habe mir das auch schon überlegt.

Ich hatte es nicht geschafft, eine Variable aus meiner Hauptfunktion an meine "GUI" Funktion zu übergeben. Aus der GUI raus ging es dann relativ easy, mit eurer Hilfe & den handles.

Aber da es "nur" zwei Variablen sind, habe ich es halt mit evalin und assignin gemacht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.05.2016, 10:17     Titel:
  Antworten mit Zitat      
Hallo Lokdog,

Statt Variablen in einem anderen Workspace zu löschen, wäre es viel sinnvoller und effizienter, erst gar keine unnötigen Kopien der Variablen zu erstellen. Variablen, die zu einem GUI gehören, sind genau innerghalb des GUIs gut aufgehoben und sie in den Base-Workspace zu schreiben ist im Allgemeinen überflüssig und damit verwirrend.

Auf ein clear all würde ich sowieso grundsätzlich immer verzichten, denn es löscht auch alle geladenen Funktionen aus dem Speicher. Das aufwändige Nachladen von der Festplatte raubt Zeit ohne irgendeinen Vorteil zu bringen.

Wenn man später mal die Programme erweitert und auch mal mehrere GUIs gleichzeitig offen hat, sind solche umfassenden Lösch- und Schließ-Methoden ausgesprochen unpraktisch, denn sie vernichten auch die Daten der anderen GUIs. Im Sinne des effizienten und flexibelen Programmierens ist der Ansatz also prinzipiell schlecht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Lokdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 12.05.2016, 12:44     Titel:
  Antworten mit Zitat      
Hallo Jan,

wie gesagt, das ist mir bewusst, wenn du mir sagen kannst, wie ich eine Variable, meiner Hauptfunktion, aus der meine Unterfunktion(GUI) aufgerufen wird, übergeben kann, ist das mit dem
Code:
Geschichte Wink


Also im Grunde sieht das ganze so aus:

Code:
function[xyz] = Hauptfunktion ()
for xyz=1:1:2
GUIFunktion;
end
 


Code:
function[] = GUIFunktion(handles,hObject)
% Hier will ich irgendwie mit dem xyz arbeiten, aber das normale übergeben in den () geht nicht

handles.xyz=xyz
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
GUIFunktion(xyz)
und in der OpeningFcn der GUI ist xyz dann in varargin{1}

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 13.05.2016, 06:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

so würde ich ja dann mein varagin, meinen handles und somit dem GUI übergeben.


Code:
function Regler_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Regler (see VARARGIN)
% Choose default command line output for Regler
handles.output = hObject;
handles.data1 = varargin {1};
% Update handles structure
guidata(hObject, handles);
 

jedoch kommt beim ausführen dann folgende Fehlermeldung:
Code:
Index exceeds matrix dimensions.

Error in Regler>Regler_OpeningFcn (line 57)
handles.data1 = varargin {1};

Error in gui_mainfcn (line 221)
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in Regler (line 40)
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

Error in interpolation (line 9)
    waitfor(Regler)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du Regler denn mit einem Argument aufgerufen?
Code:
Regler(xyz)


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 13.05.2016, 14:13     Titel:
  Antworten mit Zitat      
Das wars Wink Jetzt habe ich aber in meiner Funktion:

Code:
% --- Executes on button press in pushbutton1.
function[handles]=  pushbutton1_Callback(hObject, eventdata, handles,xyz)


eine Variable:

Code:
handles.Name=get(handles.Name, 'string');


diese würde ich gern beim zweiten Aufrufen meine OpeningFunktion nutzen,
diese würde mein Programm auch erst beim zweiten mal aufrufen wollen,
jedoch sagt er mir, das "handles.Name" nicht existiert.

Woran könnte das liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

weil du zwei verschiedene Instanzen der GUI hast und diese erstmal nicht miteinander kommunizieren.

Der sauberste Weg wäre, die aus der ersten Instanz benötigten Informationen über die OutputFcn zurückzugeben und das dann über die OpeningFcn in die zweite Instanz hineinzufüttern.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 13.05.2016, 14:54     Titel:
  Antworten mit Zitat      
Alles klar,
also wie das varargin funktioniert haben wir ja schon geklärt.
wenn ich nun z.B.

Code:
varargout{1} = handles.Name;

somit meinem Varargout1 mein handles.Name Variable zuordne, was muss dann im OpeningFN stehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
Daten = Regler;
Regler(Daten);


Daten ist die Variable, die du hin- und herschieben möchtest.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 18.05.2016, 11:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

das hab ich jetzt noch nicht so genau verstanden Confused

Gruß,
Philipp
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.