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

Variablen speichern/behalten in .exe Ausführung

 

manphiz
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2017, 11:15     Titel: Variablen speichern/behalten in .exe Ausführung
  Antworten mit Zitat      
Guten Tag zusammen,

habe ein kleines Programm mit GUI erstellet, was Grafiken darstellen kann.
Mit dem deploytool habe ich eine .exe Datei erzeugt.

Nun meine Frage: ist es möglich, dass die Variablen und Werte, die bei Benutzung mit der .exe entstehen, gespeichert werden.
Also, wenn ich die exe schließe und wieder öffne, dass mein Fortschritt genau gleich bleibt.

Das wäre super, wenn das jemand weiß,
Tausend Dank.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.05.2017, 11:28     Titel:
  Antworten mit Zitat      
Hallo,

ich würde das zunächst mal innerhalb von MATLAB versuchen, und zwar so:
- eine CloseRequestFcn erstellen
https://www.mathworks.com/help/matl.....s.html#property_d0e276069
- in dieser alle eingegebenen Daten auslesen und in eine Datei (z.B. .mat) schreiben

- in der OpeningFcn nach der Datei mit den Einstellungen suchen und diese wieder in die einzelnen Elemente schreiben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2017, 15:57     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich würde das zunächst mal innerhalb von MATLAB versuchen, und zwar so:
- eine CloseRequestFcn erstellen
https://www.mathworks.com/help/matl.....s.html#property_d0e276069
- in dieser alle eingegebenen Daten auslesen und in eine Datei (z.B. .mat) schreiben

- in der OpeningFcn nach der Datei mit den Einstellungen suchen und diese wieder in die einzelnen Elemente schreiben.

Grüße,
Harald


Vielen Dank, Harald.
Das werde ich mal versuchen
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2017, 12:38     Titel:
  Antworten mit Zitat      
Hallo zusammen,

habe nun eine Lösung gefunden.
Leider ist das über die OpeningFcn nicht möglich, da ich ein Tool für Tabs benutze und das macht dann Probleme.
Habe es nun mit 2 Buttons (speichern und laden) gelöst, hier der Code für die, die ähnliches benötigen.

Button speichern:
Code:

button = questdlg('Alle Daten speichern?', ...
        'Speichern','Yes','No','No');
switch button
case 'Yes',
   
%% Daten in mydata schreiben und speichern
% Var.Eingabefeld
eingabe = get(handles.eingabe,'String');
handles.mydata.eingabe_save = eingabe;
guidata(hObject,handles);              
session_data=handles.mydata;
save gui_session_data.mat session_data
 msgbox (' Alle Daten wurden erfoglreich gespeichert');    
case 'No',
            errordlg (' Es wurde nichts gespeichert! Drücke "YES" um zu speichern');    
end
 


Button laden
Code:

handles.output = hObject;

if(exist('gui_session_data.mat')==2)
    load('gui_session_data.mat')
    % Daten laden
    handles.mydata=session_data;
    set(handles.eingabe,'String', handles.mydata.eingabe_save);

    msgbox ('  Daten  erfolgreich geladen');  
else
    errordlg (' Keine Speicherdaten gefunden !');
end
 


Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2017, 16:23     Titel:
  Antworten mit Zitat      
Sorry für Mehrfachposting.
Leider gibt es ein weiteres Problem.

Beim Einlesen/Speichern von Variablen aus edit-Felder gibt es keine Probleme, das geht mir folgendem Code
Code:
eingabe = get(handles.eingabe,'String');
handles.mydata.eingabe_save = eingabe;


Will ich aber eine Varaible aus meinem Workspace holen speichert Matlab diese nicht.
Dazu habe ich folgenden Code versucht:
Code:

tf=isfield(handles,'Variable_x'); % Überprüfen ob Variable in den Handles ist
if tf==1; % Falls ja, Variable einlesen
Variable_x = handles.Variable_x;
handles.mydata.Variable_x_save = Variable_x; % Variable speichern
 


Matlab erzeugt keine Fehlermeldung, er speichert die Variable nur nicht.

Kann jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Handles-Struktur muss immer explizit aktualisiert werden, wenn sie in einer anderen Funktion so verfügbar sein soll, typischerweise so:
Code:
guidata(hObject, handles)


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2017, 08:10     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

die Handles-Struktur muss immer explizit aktualisiert werden, wenn sie in einer anderen Funktion so verfügbar sein soll, typischerweise so:
Code:
guidata(hObject, handles)


Grüße,
Harald


Das hatte ich bereits im Code eingebaut, siehe viertes Posting des Themas. An was kann es sonst liegen?

edit: ist es denn zwigend notwenig alle handles einzeln zu speichern?
kann ich nicht alle handles, die aktuell in Benutzung sind speichern?
Denn wenn ich während des codes mit
Code:
handles.mydata
abfrage, werde mir ja auch alle handles aufgezeigt.

edit2: das Speichern hat geklappt, denn die Variablen sind im erzeugten m.file, das Problem ist also beim reinladen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du denn beim Reinladen auch den guidata-Befehl drin?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2017, 08:32     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

hast du denn beim Reinladen auch den guidata-Befehl drin?

Grüße,
Harald


Stimmt, danke. So geht es.

Jetzt ist nur ein weiteres Problem aufgetaucht, bei der Ausführung des Speicherns und Ladens in Matlab als .m file gibt es keine Probleme.

Erstelle ich aber eine .exe und versuche es dort, funktioniert es nicht.
Es können keine handles gespeichert werden und beim Reinladen lädt er die handles, welche ich zuletzt als .m file gespeichert hatte.
Woran könnte das liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

eines der häufigsten Probleme sind Pfadprobleme.
Zudem sollte man die .exe aus einer Konsole heraus starten, damit man eventuelle Fehlermeldungen sieht.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 10:45     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

eines der häufigsten Probleme sind Pfadprobleme.
Zudem sollte man die .exe aus einer Konsole heraus starten, damit man eventuelle Fehlermeldungen sieht.

Grüße,
Harald


Danke für den Vorschlag mit der Konsole.
Leider werden keine Fehler angezeigt.
Ein Pfadproblem schließe ich ebenfalls aus, da das .mat File (in dem die Speicherdaten stehen) erzeugt wird und dieses kann man auch Reinladen.

Es stehen nur die falschen Daten im .mat File.
Er speichert, wie gesagt, die Variablen aus dem letzten "Test" als m.file, bevor die .exe erzeugt wurde.

Ich bin ratlos..
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2017, 10:49     Titel:
  Antworten mit Zitat      
Hallo,

da bräuchte ich dann wirklich ein reproduzierbares Beispiel.

Ich würde aber für Versuchszwecke nochmal sicherstellen, dass beim Laden und Speichern der .mat-Datei der vollständige Pfad (C:\...\file.mat) angegeben ist.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 11:07     Titel:
  Antworten mit Zitat      
Im Anhang habe ich ein kurzes Beispiel erstellt.
Hoffe dies erleichtert es etwas.

SpeichernLaden.m
 Beschreibung:

Download
 Dateiname:  SpeichernLaden.m
 Dateigröße:  6.3 KB
 Heruntergeladen:  209 mal
SpeichernLaden.fig
 Beschreibung:

Download
 Dateiname:  SpeichernLaden.fig
 Dateigröße:  2.57 KB
 Heruntergeladen:  185 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2017, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mal beim Speichern folgendes eingefügt:
Code:
msgbox(which('gui_session_data.mat'))


Siehe da, er speichert in irgendein temporäres Verzeichnis.
Dass dann nicht zumindest dieselbe Datei geladen wird, wundert mich, aber ich kann eben nur empfehlen, beim Schreiben und Lesen jeweils den vollen Pfad anzugeben. Ggf. den Nutzer über uigetfile / uiputfile die Datei auswählen lassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 12:39     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich habe mal beim Speichern folgendes eingefügt:
Code:
msgbox(which('gui_session_data.mat'))


Siehe da, er speichert in irgendein temporäres Verzeichnis.
Dass dann nicht zumindest dieselbe Datei geladen wird, wundert mich, aber ich kann eben nur empfehlen, beim Schreiben und Lesen jeweils den vollen Pfad anzugeben. Ggf. den Nutzer über uigetfile / uiputfile die Datei auswählen lassen.

Grüße,
Harald


Danke fürs Ausprobieren.

Dann benutze ich beim Speichern:

Code:
[filename, pathname] = uiputfile ('gui_session_data.mat','Save file );
fullpathname = strcat(pathname, filename);


und beim Einlesen:

Code:
   [filename, pathname] = uigetfile ('gui_session_data.mat','Load file );
    fullpathname = strcat(pathname, filename);


nur wie kann ich hier die save und load Befehle einbauen?
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 - 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.