|
|
alle Variablen aus Workspace löschen wenn GUI gestartet wir |
|
albiknalltuete |
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 27.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.10.2015, 10:03
Titel: alle Variablen aus Workspace löschen wenn GUI gestartet wir
|
|
Ich würde gerne im gleichen Zug, wenn die GUI gestartet wird, alle Variablen, die vorher durch Einzelberechnungen etc. in den Workspace berechnet wurden, löschen.
Dazu habe ich in die OpeningFcn folgendes geschrieben:
Zu aller erst wird der Übersichtlichkeit halber das Command Window gelöscht, danach sollen alle Variablen gelöscht werden. Den ersten Befehl (
clc
) führt das Programm aus, aber
clearvars all
nicht. Die nachfolgenden Befehle werden auch ausgeführt.
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 19.10.2015, 10:21
Titel: Re: alle Variablen aus Workspace löschen wenn GUI gestartet
|
|
|
|
|
Hallo albiknalltuete,
Warum möchtest Du alle Variablen in welchem Workspace löschen? Jede Funktion hat ihren eigenen Workspace in Matlab. Deshalb löscht das
clearvars
alle Variablen, die innerhalb der Funktion "Schnellauswertung_OpeningFcn" definiert worden sind. Insbesondere sind das die Inputs. Das halte ich nicht für sinnvoll.
Da man innerhalb einer Funktion sowieso die volle Kontrolle über alle lokal benutzten Variablen hat, halte ich den Versuch "ferngesteuert" in anderen Workspaces Variablen zu löschen für nicht nützlich. Das erschwert nur das Debuggen unnötig. Siehe dazu die riesige Menge an Diskussionen in diesem Forum und dem Internet bzgl. "assignin", "evalin" und der Verwendung "globaler Variablen".
fullfile(uigetdir)
bewirkt nichts, da
fullfile
mehrere Strings so aneinanderhängt, dass die File-Separatoren richtig gesetzt sind. Bei nur einem String geschieht also gar nichts.
Wenn der User aber auf "Cancel" drückt, versucht Matlab Unfug in den Pfad einzubinden.
Statt Ordner in den Pfad einzubinden, ist es deutlich sicherer immer den Absoluten Pfad-Namen für Files und Ordner zu verwenden. Andernfalls wählt Matlab das File aus, dass früher im PATH vorkommt oder im aktuellen Ordner liegt, das kann aber ein anderes sein, als Du beabsichtigst.
Gruß, Jan
|
|
|
albiknalltuete |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 27.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.10.2015, 10:40
Titel: Re: alle Variablen aus Workspace löschen wenn GUI gestartet
|
|
|
|
|
Hey Jan
Jan S hat Folgendes geschrieben: |
Hallo albiknalltuete,
Warum möchtest Du alle Variablen in welchem Workspace löschen? Jede Funktion hat ihren eigenen Workspace in Matlab. Deshalb löscht das
clearvars
alle Variablen, die innerhalb der Funktion "Schnellauswertung_OpeningFcn" definiert worden sind. Insbesondere sind das die Inputs. Das halte ich nicht für sinnvoll.
Da man innerhalb einer Funktion sowieso die volle Kontrolle über alle lokal benutzten Variablen hat, halte ich den Versuch "ferngesteuert" in anderen Workspaces Variablen zu löschen für nicht nützlich. Das erschwert nur das Debuggen unnötig. Siehe dazu die riesige Menge an Diskussionen in diesem Forum und dem Internet bzgl. "assignin", "evalin" und der Verwendung "globaler Variablen".
|
Dann werde ich das lassen. Das hatte ich mir auch schon so ähnlich gedacht., wollte aber auf Nummer sicher gehen, dass wirklich keine vorherige Variable reinfunkt.
Jan S hat Folgendes geschrieben: |
fullfile(uigetdir)
bewirkt nichts, da
fullfile
mehrere Strings so aneinanderhängt, dass die File-Separatoren richtig gesetzt sind. Bei nur einem String geschieht also gar nichts.
Wenn der User aber auf "Cancel" drückt, versucht Matlab Unfug in den Pfad einzubinden.
Statt Ordner in den Pfad einzubinden, ist es deutlich sicherer immer den Absoluten Pfad-Namen für Files und Ordner zu verwenden. Andernfalls wählt Matlab das File aus, dass früher im PATH vorkommt oder im aktuellen Ordner liegt, das kann aber ein anderes sein, als Du beabsichtigst.
Gruß, Jan |
fullfile
habe ich rausgenommen. Da hast du recht.
Den Hintergrund der zweiten Verbesserung verstehe ich nicht. Aber hier nochmal eine Zusatzinformation: Der absolute Pfad ist schwierig, da das Programm innerhalb unserer Abteilung und auch auf dem Server liegen wird. Der Ordner wird jedes Mal neu ausgewählt, da kann eigentlich keine frühere Version drin sein.
Grüße Albi
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 19.10.2015, 11:36
Titel: Re: alle Variablen aus Workspace löschen wenn GUI gestartet
|
|
Hallo albiknalltuete,
Wenn Du relative Pfad-Namen verwendest, z.B. nur den Namen der Datei selbst, ist dies keine eindeutige Identifikation mehr, falls Dateien /Ordner mit dem gleichen Namen auch an anderer Stelle in Matlab's PATH oder im aktuellen Ordner vorkommen. Sicherer ist es deshalb, den von
uigetdir
zurückgelieferten Ordner z.B. in den UserData oder ApplicationData (siehe
guidata
) zu speichern und dann immer per
fullfile
diese Ordner für die Definition aller Datei-Namen mit einzubinden.
Es ist z.B. möglich, dass ein Timer- oder GUI-Callback den aktuellen Ordner neu setzt. Wenn Du dann nach "test.mat" suchst, bekommst Du vielleicht irgendwelche Test_Daten, die zu Matlab gehören.
Gruß, Jan
|
|
|
albiknalltuete |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 27.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.10.2015, 11:53
Titel: Re: alle Variablen aus Workspace löschen wenn GUI gestartet
|
|
|
|
|
Jan S hat Folgendes geschrieben: |
Hallo albiknalltuete,
Wenn Du relative Pfad-Namen verwendest, z.B. nur den Namen der Datei selbst, ist dies keine eindeutige Identifikation mehr, falls Dateien /Ordner mit dem gleichen Namen auch an anderer Stelle in Matlab's PATH oder im aktuellen Ordner vorkommen. Sicherer ist es deshalb, den von
uigetdir
zurückgelieferten Ordner z.B. in den UserData oder ApplicationData (siehe
guidata
) zu speichern und dann immer per
fullfile
diese Ordner für die Definition aller Datei-Namen mit einzubinden.
Es ist z.B. möglich, dass ein Timer- oder GUI-Callback den aktuellen Ordner neu setzt. Wenn Du dann nach "test.mat" suchst, bekommst Du vielleicht irgendwelche Test_Daten, die zu Matlab gehören.
Gruß, Jan |
Danke für deine Hinweise. Ich steige aber noch nicht ganz dahinter, was ich falsch mache, da
uigetdir
mir keinen relativen, sondern einen absoluten Pfad zurückgibt. Wenn ich also Beispiel:
eingebe, meinen Ordner " Skript_Schnellauswertung" auswähle und mir dann den "a" anschaue, steht ein absoluter Pfad als String in der Variablen.
Ich werde mich nochmal mit paar Informatiker-Freunden hinsetzen und versuchen mir das erklären zu lassen.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 19.10.2015, 15:39
Titel: Re: alle Variablen aus Workspace löschen wenn GUI gestartet
|
|
Hallo albiknalltuete,
uigetdir
gibt Dir tatsächlich einen absoluten Pfad aus. Du musst ihn nur später auch benutzen:
Und da die Variable "a" nach dem Verlassen der funktion gelöscht wird, muss sie vorher noch z.B. in der Variable "handles" gespeichert werden, so dass man auch aus anderen Callbacks des GUI darauf zugreifen kann:
Gruß, Jan
|
|
|
albiknalltuete |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 27.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.10.2015, 06:48
Titel:
|
|
Hey Jan,
ich glaube jetzt vermischen wir hier einiges.
Mit dem
uigetdir
öffne ich ein Auswahlfenster und füge die gesamte Ordnerstruktur zu Matlab hinzu. Der Ordner "Zwischenablage" wird dabei mit hinzugefügt, da es ein Unterordner ist.
Ich öffne die Datei messgroessen.txt nur, damit sie leer ist. Diese brauche ich in einer anderen GUI-Funktion als Zwischenspeicher.
Die Variable "a" war nur ein Beispiel, um zu zeigen, dass
uigetdir
einen absoluten Pfad wiedergibt.
Die GUI ist noch um einiges länger. Es ging mir um die Variablenproblematik und das hast du mir gut erklärt!
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 20.10.2015, 08:40
Titel:
|
|
|
|
|
Hallo albiknalltuete,
Zitat: |
Mit dem
uigetdir
öffne ich ein Auswahlfenster und füge die gesamte Ordnerstruktur zu Matlab hinzu. |
Und genau davon rate ich dringend ab. Der Matlab-PATH ist gut für M-Files, damit sie automatisch gefunden werden, ohne dass man den absoluten Pfad mit angeben muss. Für Daten-Files ist das jedoch tückisch, denn es kann vorkommen, dass mehrere Files mit dem gleichen Namen in unterschiedlichen Ordnern im PATH liegen. Und welches dann gewählt wird, kann man als User kaum überschauen. Das hängt dann nicht nur von der Reihenfolge der Ornder im PATH ab, sondern auch vom aktuellen Ordner.
Wenn man immer absolute File-Namen verwendet, entfällt der Grund Pfade zu User-Daten in den Matlab-PATH zu hängen und damit hat man eine Fehlerquelle weniger. Und da das in sehr vielen Computer-Programmen zu ernsten Fehlern geführt hat (nicht nur bei Matlab, sondern auch sicherheitsrelevante Bugs in Betriebssystemen), ist es grundsätzlich eine gute Idee niemals relative Pfadnamen zu verwenden.
Und, ja, das hatte mit Deiner eigentlichen Frage nichts zu tun.
Viele Grüße, Jan
|
|
|
albiknalltuete |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 27.08.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.10.2015, 08:50
Titel:
|
|
Hey Jan,
okay ich glaube jetzt habe ich es langsam. Die Datei "messgroessen.txt" ist jetzt nicht mehr vorhanden, da ich eine andere Idee verfolge. Dennoch habe ich zwei Dateien, die ich Zwischenspeicher. Ich würde zu gegebener Zeit mich hier nochmal melden, wenn ich das realisiere.
Grüße Albi
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|