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

Funktion aufrufen aus Variable

 

marie93
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2011, 09:54     Titel: Funktion aufrufen aus Variable
  Antworten mit Zitat      
Hallo Leute,

ich brauch eure Hilfe.

Ich habe ein Excel-File, wo nacheinander 64 Funktionsnamen aufgelistet sind. Diese Funktionen sollen nacheinander, durch drücken eines Button in einem GUI aufgerufen werden. Jedesmal wenn der Button gedrückt wird, wird der nächste Funktionsname aus dem Excelsheet gelesen und in einer Variablen gespeichert. Exclamation

---> Wie schaffe ich es nun, dass die Funktion aufegrufen wird, also im Prinzip aus der Variable einen "Funktionsaufruf" mache ? Irgendwie mit "function" Question

Bsp, auslesen von Programmname und zu übergebendes Argu,ment aus dem Excelsheet und nun ...????:

[Argument, Programm] = xlsread('Test.xls', 'Test', 'A2:B2')

Danke !!! Very Happy

Eurer Marie93
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du wirst in dem Fall nicht um EVAL herumkommen. Allerdings wirst du sehr darauf achten müssen, dass der Aufruf auch vernünftig klappt.

Code:
eval(['rueckgabe=', programm, '(', argument, ');']);


Vorsicht im übrigen: xlsread gibt im ersten Argument alle numerischen Daten und im zweiten Argument alle Textdaten zurück. Das wird also zu einem Problem führen, falls dein Eingabeargument nicht numerisch ist.

Wie du auch an dem Code siehst, wird das mehr oder weniger Stückwerk werden. Es wäre also zu überlegen, die Strategie hier abzuändern (sofern das möglich ist).

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2011, 11:13     Titel:
  Antworten mit Zitat      
Danke, jedoch funtioniert es nicht, vielleicht verstehe ich die Syntax auch nicht richtig

Durch einen Button wird die folgende Funktion ausgelöst:

Code:
%
function pbEbene_Callback(hObject, eventdata, handles)

[Argument, Programm] = xlsread('Testverlauf.xls', 'Testverlauf', 'A2:B5')

eval([ Programm(2,2) '(' Argument(2,1) ');']);


Wodurch ich einlese:

Argument =

4
22
4
22

Programm =

'' 'play_mono'
'' 'play_ebene'
'' 'play_mono'
'' 'play_ebene'



und die Funktion:

play_ebene(4)

aufegrufen werden sollte.
Code:

function test = play_ebene(wert)
msgbox(wert)


Theoretisch müsste doch nun eine msgbox erscheinen mit dem Wert "4". Exclamation

oder etwas nicht ? Sad

Eure Marie93
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

und was passiert? gibt es eine Fehlermeldung? Welche? Auf den ersten Blick sehe ich nur, dass du Programm wohl als Cell Array indizieren solltest, also

Code:
eval([ Programm{2,2} '(' Argument(2,1) ');']);  


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2011, 16:11     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte den Fehler:
??? Undefined function or method 'eval' for input arguments of type 'cell'.
bekommen.

Wenn ich es nun so wie du bschreiben hast aktualisiere, bekomme ich den Fehler:

Code:
eval([ Programm{2,2} '(' Argument(2,1) ');']);


??? Error: The input character is not valid in MATLAB statements or expressions.

Error in ==> GUI_Proband_2>pbEbene_Callback at 167
eval([ Programm{2,2} '(' Argument(2,1) ');']); % {} bedeuten Cell-Array


Gruß
marie93
Private Nachricht senden Benutzer-Profile anzeigen
 
marie93
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 15.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2011, 16:24     Titel:
  Antworten mit Zitat      
Ha, ich weiß nun woran es lag:

der eval Befehl darf nur Daten vom Typ String beinhalten, wodurch ich die Variable Argumente noch von Integer in String umwandeln musste:

Code:
eval([Programm{2,2} '(' int2str(Argument(2,1)) ');']);


Dank.
Eure Marie93
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

so sollte es gehen.
Code:
eval([ Programm{2,2} '(' num2str(Argument(2,1)) ');']);


Mich wundert allerdings, dass du in das Element 2,2 indizierst, obwohl es ein Vektor zu sein scheint.

Wie du siehst, ist der Code so sehr mühsam, unübersichtlich und schwer nachvollziehbar. Ich würde also nochmal empfehlen, einen anderen Weg zu suchen.

Grüße,
Harald
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.