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

Variablendeklaration nicht eindeutig?

 

Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2010, 18:47     Titel: Variablendeklaration nicht eindeutig?
  Antworten mit Zitat      
Da macht mein GUI gerade einen unerwarteten Fehler ("Matrix Dimensions exeeded") und ich begebe mich mal wieder in den Debugger. Hier stellt sich heraus, dass ein noch leere listbox nicht wie gewohnt als 1x1 cell erstellt wurde, sondern mit dem Wert Null.

Warum stört mich das? Weil ich auf den (noch nicht existierenden) Wert zugreifen möchte und ich per (1,1) auf eine 1x1 cell zugreifen kann aber nicht auf den Wert Null.

Also sehe ich mir die Variablendeklaration an

global a
global b

und stelle fest, dass bereits hier die variable a als 1x1 cell erstellt wurde und variable b als 0.

Wie kann denn das sein? Ist die Deklaration denn nicht immer die gleiche? Wie sollte ich hier vorgehen?


Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2010, 11:10     Titel:
  Antworten mit Zitat      
Ich brauche bitte wirklich Hilfe. Wenn ich den GUI ein weiteres mal starte, wird die Variable im Moment der Global-Deklaration mit dem Speicherplatz vom letzten Durchlauf angelegt.

Wenn also in einer Edit-Box 18 Zeilen standen als ich das Programm beendet habe, dann wird die Liste mit <18x1 cell> erstellt beim Neustart.

Frage 1: Warum ist das so? Sollte ein Neustart eines GUIs (inklusive schließen und wieder öffnen) nicht alle Variablen neu erstellen?

Um dies zu umgehen habe ich einen Close-Button eingefügt, der alle Variablen cleared bevor er den GUI schließt. Auch setze ich beim Laden der Daten bei Neustart dann beide Werte auf "leer" oder Null

A=[];
B=[];

bzw

A=0;
B=0;

Mein Debugger sagt mir auch, dass beide Variablen leer sind bzw. Null. Beim ersten Aufruf von A hat A die Größe < 1x1 cell >. Beim ersten Aufruf von B hat Bdie Größe < 1x0 cell > (und daher kann ich bei B nicht auf die Column zugreifen).

Frage 2: Was mache ich hier falsch? Was ist der Unterschied? Ist das Zufall? Ich habe schon im Inspektor nach Unterschieden gesehen, aber die beiden Listboxen sind komplett gleich bis auf den Namen. [/b]
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.06.2010, 15:01     Titel:
  Antworten mit Zitat      
Hallo
zu Frage 1:
Ja, aber nur die Lokal-Definierte Variablen, werden neu erstellt.
Die Globalen Variablen überleben solange, bis sie explizit gelöscht werden oder Matlab geschlossen wird.

beim Schließen, globale Variablen löschen
Code:


zu Frage 2: zu wenig Info um eine Aussage zu treffen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2010, 15:18     Titel:
  Antworten mit Zitat      
Danke für Deine Antwort.

Ich benutze nun "clear all". Laut Definition sollte das auch die globalen Variablen löschen.


Zu Frage 2:

Man stelle sich einen GUI vor mit zwei edit-Felder, namens A und B. Beide Textfelder sollen nur der Ausgabe dienen, nicht der Eingabe.

Man stelle sich vor man läd x-beliebige Daten ein und leert dabei auch diese edit-Felder.

Also A=[]; B=[];

Nun sind (auch laut Debugger) beide Felder leer.

Ich starte per Button die Analyse der Daten und will zeilenweise Informationen ausgeben. Ich mache dies (weil mir nichts besseres eingefallen gibt, aber vielleicht gibt es effizientere Methoden) folgendermaßen:

Ich nehme das was schon im Feld drin steht, schreibe oben eine Zeile dazu und schreibe alles zurück in das Feld.

Somit wird für die erste Zeile, die ausgegeben werden soll, zunächst auf eine noch leeres edit-Feld zugegriffen.

Dies hat alles wunderbar funktioniert als es nur A gegeben hat. Nun habe ich aber B hinzugefügt und will andere Informationen ausgeben lassen, aber auf die gleiche Art und Weise.

Und hier kommt plötzlich das Problem, dass das Programm bei A etwas auslesen kann, bei B aber nicht, d.h. sobald die erste Information in B geschrieben werden soll bekomme ich eine Fehlermeldung.

Die Fehlermeldung kommt dann an der Stelle, wo ich die neue Zeile zum bisherigen Inhalt des Feldes dazuschreiben will, denn dieser bisherige Inhalt exisitiert eben noch nicht.

Ich frage mich daher was der Unterschied ist zwischen A und B. Denn auch wenn es sich nicht um die bestmögliche Programmierung handelt, so sollte Matlab doch zumindest das gleiche tun...

Ich hatte die Frage nach dem Hinzuschreiben der Zeilen bereits gestellt, so kannst Du sehen was ich da machen will:

http://www.gomatlab.de/viewtopic,p,43512.html#43512

Der Code den Du dort findest funktioniert einwandfrei. Und nun mache ich das das zweite mal und nichts geht...

???
 
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.