Verfasst am: 03.09.2014, 16:43
Titel: Teil der Werte aus Workspace von GUI aus löschen
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.
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
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
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
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;
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!
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?
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.