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

Neues Feld in struct einfügen nach Button-Click

 

derbeshot89
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.13
Wohnort: Hamburg
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 14.05.2013, 11:05     Titel: Neues Feld in struct einfügen nach Button-Click
  Antworten mit Zitat      
Hallo Zusammen,

ich arbeite erst seit kurzem mit MATLAB und hoffe, dass ihr mir bei meinem Problem helfen könnt. Crying or Very sad

Ich habe eine Oberfläche, in der drei Edit-Fenster sind. Nachdem man in die Fenster geschrieben hat und auf einen Button klickt soll ein zusammengefügter (durch Unterstriche getrennter) Name daraus enstehen, das klappt auch schon sehr gut. Bsp.: edit1_edit2_edit3.

Nun soll nach dem Klick zusätzlich dieser zusammengesetzter Name in einem Struct als Feld gespeicht werden (entspricht also dem Feldnamen). Auch das klappt noch sehr gut.

Der Code sieht wie folgt aus:

Code:
function button_save_newdata_Callback(hObject, eventdata, handles)
% hObject    handle to button_save_newdata (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

value1 = get(handles.edit_customer, 'String');
value2 = get(handles.edit_date, 'String');
value3 = get(handles.edit_msn, 'String');
name = [value1,'_', value2,'_' value3];
   
s = struct(name,'');  %Der Wert ist noch leer ('')

assignin('base', 'Data', s);   %Erstellt Struct mit dem Namen Data.
 

Nun zum Problem:

Wenn ich jetzt die Eingabe in den Edit-Fenstern ändere und wieder auf den Button klicke wird das davor gepeicherte Feld im struct einfach überschrieben bzw. es wird jedesmal ein neues struct erstellt. Ich will aber erreichen, dass bei jedem Klick, nachdem man eine neue Eingabe in die Fenster gemacht hat, ein neues Feld im schon vorhandenen struct angelegt wird und die Felder sollen dann untereinander stehen. Ich sitzte jetzt seit Stunden an diesem Problem und komme einfach nicht mehr weiter. Forum und Internet hat mir leider nicht viel gebracht. Ich hoffe, dass es machbar ist Wink .

Gruß Fatih

[EDITED, Jan, Bitte Code-Umgebung benutzen, Danke!]
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: 14.05.2013, 12:36     Titel: Re: Neues Feld in struct einfügen nach Button-Click
  Antworten mit Zitat      
Hallo derbeshot89,

ASSIGNIN erzeugt "ferngesteuert" Variablen in einem anderen Workspace. Das erhöht die Komplexität eines Programms heftig und kann ein sinnvolles Debuggen dramatisch erschweren. Ich rate ausgesprochen von der Benutzung ab. Es ist viel klarer, wenn man Variablen ordentlich per Input und Output transportiert.

Aber trotzdem ist es möglich:
Code:
Data = evalin('base', 'Data');
Data.(name) = '';
assignin('base', 'Data', Data);   %Erstellt Struct mit dem Namen Data.
 

Aber ich würde so etwas auf keinen Fall machen. Du könntest stattdessen Data per GUIDATA in der Figure speichern und einen speziellen Callback schreiben, der das Struct dann auf Anfrage als Output zurückgibt.

Gruß, Jan
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: 14.05.2013, 12:44     Titel: Re: Neues Feld in struct einfügen nach Button-Click
  Antworten mit Zitat      
Code:
function button_save_newdata_Callback(hObject, eventdata, handles)
% hObject    handle to button_save_newdata (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

value1 = get(handles.edit_customer, 'String');
value2 = get(handles.edit_date, 'String');
value3 = get(handles.edit_msn, 'String');
name = [value1,'_', value2,'_' value3];
   
s.(name) = ''
 


Derzeit überschreibst du dein Struct jedesmal mit einem neuen Struct, statt deinem Struct ein neues Element hinzuzufügen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
derbeshot89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.13
Wohnort: Hamburg
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 14.05.2013, 12:51     Titel:
  Antworten mit Zitat      
Hallo Jan,

das ging echt wirklich schnell und ich Danke dir vielmals Wink . Klappt wunderbar.

Du hast Recht. Ich habe jetzt hier im Forum öfter gelesen, dass man evalin und assignin vermeiden sollte. Ich schau mir mal an, wie ich es anders machen könnte. Vielen Dank Smile

Gruß Fatih
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.