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

Teil der Werte aus Workspace von GUI aus löschen

 

gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 03.09.2014, 16:43     Titel: Teil der Werte aus Workspace von GUI aus löschen
  Antworten mit Zitat      
Hallo,

ich habe folgendes Probelm:

ich habe eine Schleife, in der ich Messdaten verarbeite und anschließend speichere.

Da die Datenmenge so groß ist möchte ich die spezifischen Daten meiner Messdaten löschen, bevor ich die neue Datei lade. Diese befinden sich im Workspace.

Mit
Code:
evalin('base','clear all');

kann ich alle Variablen aus der Workspace (Aufruf im GUI) öschen, jedoch löscht es auch meinen Schleifenzähler und ich habe somit eine endlosschleife. Dies möchte ich vermeiden und somit alles außer den Schleifenzähler (counter) löschen.

Normalerweise funktioniert dies aus dem Workspace heraus direkt mit
Code:
clear('-regexp','[^counter]*')


Wie kann ich das ganze aber über die GUI aufrufen bzw. wie muss ich beide Befehle verknüpfen?

Schon mal vielen Dank
gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du willst den zweiten Befehl also mit evalin im Base Workspace ausführen? Ja, das ist in der Tat schwierig und auch der Grund, warum ich bei jeder Gelegenheit davon abrate, den Base Workspace als Zwischenablage zu verwenden. Die verschiedenen Möglichkeiten finden sich hier:
http://www.mathworks.de/de/help/mat.....data-among-callbacks.html

Als schnelle Abhilfe für den Moment:
Code:
evalin('base','clear(''-regexp'',''[^counter]*'')');

(nur einfache Anführungszeichen; teils zwei nacheinander)

Bitte aber wirklich nicht mehr solche Krücken verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 05.03.2015, 12:47     Titel:
  Antworten mit Zitat      
Hat jemand einen Tip, habe ein ähnliches Problem.

In meinem GUI ist eine Listbox die meine derzeitigen Variablen aus dem Workspace anzeigt.

Ich habe hier ein Skript gefunden mit dem ich gezielt einen String aus der Listbox löschen kann:

Code:

% --- Executes on button press in delete.
function delete_Callback(hObject, eventdata, handles)
% hObject    handle to delete (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Aktuelle Anzahl an elementen wird ermittelt
currentVal = get(handles.listbox1,'Value');

% Alle Elemente werden als String eingelesen
StrToRemove = get(handles.listbox1,'String');

% Das ausgewälte Ement wird gelöscht
StrToRemove(currentVal) = [];

% Der Anzahl an Elementen wird um ein erniedrigt
set(handles.listbox1,'Value',currentVal-1);

% Die neuen Elemente ohne das gelöschte Element werden gespeichert
set(handles.listbox1,'string',StrToRemove);

% Anschließen wird erneut eine Abfrage der Anzahl an Elementen
% durchgeführt
new_value = get(handles.listbox1,'Value');

% Wenn das gelöschte Element das letzte Element war muss das VAlue auf % 1 gesetzt werden. Sonst springt der zeiger auf das letzte Element in der % Liste
if new_value == 0
% Es war nur ein Element im ListBox
set(handles.listbox1,'Value',1);
else
set(handles.listbox1,'Value',new_value);
end;



Nun würde ich gerne genau den gelöschten 'String' auch aus meinem Workspace löschen.
Leider komme ich nicht weiter, da ich nicht weiß wie ich den gelöschten String quasi "erkenne" und ihn dann mit

Code:


aus dem Workspace löschen kann!


Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 05.03.2015, 14:09     Titel:
  Antworten mit Zitat      
Hi, das ist echt eine dreckige Methode um Datenmanagement zu betreiben, genau wie beim gui_einsteiger.

Aber für deinen Fall kennst du ja den Namen:

Code:
StrToRemove(currentVal)

StrToRemove ist ist ein CEllarray mit mehreren Zeilen.

d.h. du könntest

Code:
clear StrToRemove(currentVal)
benutzen, was wirklich keine saubere Arbeit ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 05.03.2015, 15:43     Titel:
  Antworten mit Zitat      
ich habe es jetzt an folgender stelle eingefügt, aber leider verschwindet die variable im workspace auch nicht.

Code:
% --- Executes on button press in delete.
function delete_Callback(hObject, eventdata, handles)
% hObject    handle to delete (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Aktuelle Anzahl an elementen wird ermittelt
currentVal = get(handles.listbox1,'Value');

% Alle Elemente werden als String eingelesen
StrToRemove = get(handles.listbox1,'String');

% Das ausgewälte Ement wird gelöscht
StrToRemove(currentVal) = [];

% Das ausgewählte Element wird aus dem Workspace gelöscht
clear StrToRemove(currentVal)

% Der Anzahl an Elementen wird um ein erniedrigt
set(handles.listbox1,'Value',currentVal-1);


% Die neuen Elemente ohne das gelöschte Element werden gespeichert
set(handles.listbox1,'string',StrToRemove);

% Anschließen wird erneut eine Abfrage der Anzahl an Elementen
% durchgeführt
new_value = get(handles.listbox1,'Value');

% Wenn das gelöschte Element das letzte Element war muss VAlue auf % 1 gesetzt werden. Sonst springt der zeiger auf das letzte Element in der % Liste
if new_value == 0
% Es war nur ein Element im ListBox
set(handles.listbox1,'Value',1);
else
set(handles.listbox1,'Value',new_value);
end;


Kann man den String den er ja aus der Listbox löscht nicht als variablennamen kennzeichnen? gibt doch eine funktion

Code:


allerdings komme ich mit der auch nicht auf das gewünschte ergebnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 05.03.2015, 15:52     Titel:
  Antworten mit Zitat      
Nicht ganz du musst mit evalin arbeiten. Du möchtest ja auf der Commando Window Ebene Befehle verarbeiten. Was wie schon gesagt nicht schön ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 05.03.2015, 15:55     Titel:
  Antworten mit Zitat      
In deinem Fall:

Code:
evalin('base',strcat('clear',32,StrToRemove(currentVal)));


Die 32 ist das Leerzeichen zwischen clear und dem Namen der Variable
Private Nachricht senden Benutzer-Profile anzeigen
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 05.03.2015, 16:05     Titel:
  Antworten mit Zitat      
Code:
Error using cell/strcat (line 23)
Inputs must be cell arrays or strings.

Error in Versuch1>delete_Callback (line 154)
evalin('base',strcat('clear',32,StrToRemove(currentVal)));


hat leider auch nicht geklappt.

Ich hatte vorher mal folgendes probiert

Code:

evalin('base',['clear' sprintf(' %s',StrToRemove{:})]);


alelrdings löscht er mir da alles außer das vorher ausgewählte.
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 05.03.2015, 16:08     Titel:
  Antworten mit Zitat      
Kannst du bitte das mal ausgeben:

Code:
StrToRemove(currentVal)


also ";" entfernen und gucken was er beim Ausführen ausgibt.


Das Format scheint falsch zu sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 05.03.2015, 16:12     Titel:
  Antworten mit Zitat      
Ach habe den Fehler gefunden:

Code:
evalin('base',strcat('clear',32,StrToRemove{currentVal}));


Bitte

Du musst natürlich auf den Zelleninhalt zugreifen
Private Nachricht senden Benutzer-Profile anzeigen
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 05.03.2015, 16:22     Titel:
  Antworten mit Zitat      
Ah super vielen Dank. Jetzt löscht er zwar immer genau den Wert ausm Workspace der unter dem Wert in der Listbox steht aber das denke ich liegt an dem vorhandenen Skript. Danke dir vielmals!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2015, 23:34     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
das ist echt eine dreckige Methode um Datenmanagement zu betreiben, genau wie beim gui_einsteiger.

Hier kann ich nur zustimmen. Wäre doch viel besser, die Daten ordentlich zu verwalten als sich mit solchen Krücken rumzuquälen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 06.03.2015, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für eure Tips. Leider fehlt mir das Know-How wie man es besser macht. Bin froh, dass es überhaupt funktioniert. Welche Möglichkeiten gibt es denn noch dieses Problem zu lösen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

der Link, den ich hier vermutlich am öftesten poste:
http://de.mathworks.com/help/matlab.....data-among-callbacks.html
Bevorzugter Weg ist m.E. Application Data.

Grüße,
Harald
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 - 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.