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

set-Befehl in for-Schleife

 

moongoblin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 09:56     Titel: set-Befehl in for-Schleife
  Antworten mit Zitat      
Ich bin mir sicher es ist ein simples Problem, bekomme es aber leider selber nicht raus. Die folgende for-Schleife soll 10 checkboxes aktivieren. Irgendwie klappt es nicht, dass er den Zähler der Schleife als Teil des Namens (also z.B. handles.check_channel1) übernimmt. Wie muss ich das schreiben?

Code:

%activate checkboxes
for i=1:10
set({handles.check_channel, 'num2str(i)'},'Enable','on');
end
 


Irgendwie hab ich das Problem immer wieder... wo muss ich welche Klammern, Häckchen etc. setzen damit er was wie interpretiert.

Danke für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 24.03.2011, 10:28     Titel:
  Antworten mit Zitat      
Hallo moongoblin,
Code:

%activate checkboxes
for i=1:10
set([handles.check_channel num2str(i)],'Enable','on');
end
 


Eckige Klammern enn du einen String zusammensetzen willst. und da num2str() eine funktion ist, darfst du diese nicht in Hochkommas setzen weil du dann aus dem Funktionsaufruf einen String machst.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 10:55     Titel:
  Antworten mit Zitat      
Fehlermeldung:

??? Reference to non-existent field 'check_channel'.
Error in ==> ...
set([handles.check_channel num2str(i)],'Enable','on');


Wenn ich den Befehl einzeln verwende, also
Code:

set(handles.check_channel2, 'Enable', 'on');
 

dann funktionierts. Ich könnte das natürlich auch einfach 10fach schreiben, aber so richtig schön wär das ja nicht.

Noch ne Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 24.03.2011, 11:05     Titel:
  Antworten mit Zitat      
ach... wie hast du die Structur denn erstellst?

Am besten du erstellst die Structure nach folgendem Prinzip
Code:

handles(2).check_channel = ...
 


Und dann kannst du das so aufrufen:
Code:

%activate checkboxes
for i=1:10
set(handles(i).check_channel],'Enable','on');
end
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.03.2011, 11:06     Titel:
  Antworten mit Zitat      
Hallo

Dynamische Felder werden so verwendet:

handles.(' dann feld als string übergeben')

Code:

%activate checkboxes
for i=1:10
    set(handles.(['check_channel', num2str(i)]),'Enable','on');
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 11:24     Titel:
  Antworten mit Zitat      
Vielen Dank, dennys Tipp war der richtige!

Zu Peter: Bin mir nicht sicher ob ich das so umstellen könnte. Hab von handles-strukturen relativ wenig Ahnung. Aber nach meinem Verständnis würden ja dann alle checkboxes in dem GUI "check_channel" heißen, was auch problematisch wäre.

Trotzdem danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 24.03.2011, 12:34     Titel:
  Antworten mit Zitat      
heute ist echt nicht mein Tag... danke denny, recht hast du... ist mir irgendwie nicht eingefallen

@moongobolin: Ja sie wären alle in check_channel aber mit unterschiedlichem Index. Also kann man einzelnd drauf zugreifen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2011, 13:22     Titel:
  Antworten mit Zitat      
Verwandte Frage: Warum geht das nicht?
Code:

for i=1:channel
    ['channel_', num2str(i)]=data(i,1:end);
...
end
 


Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.03.2011, 15:18     Titel:
  Antworten mit Zitat      
moongoblin hat Folgendes geschrieben:
Verwandte Frage: Warum geht das nicht?
Code:

for i=1:channel
    ['channel_', num2str(i)]=data(i,1:end);
...
end
 


Danke!


Weil ['channel_', num2str(i)] ergibt einen Wert von Datentype String. Und ein Wert kann kein Bezeichner sein.

Damit der Name als Bezeichner fundiert, braucht man den Befehl EVAL dazu. EVAL wertet dann den STRING aus.

so:
Code:

for i=1:channel
    eval(['channel_', num2str(i) ,'=data(i,1:end);'])
...
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2011, 15:30     Titel:
  Antworten mit Zitat      
Danke!
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.