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 zur Laufzeit generieren

 

eisvogel_2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2010, 23:26     Titel: Variablen zur Laufzeit generieren
  Antworten mit Zitat      
Hallo zusammen,


leider weiß der Code erst zur Laufzeit, wie viele verschiedene Variablen eine Funktion auswerfen werden. Wie kann ich sicherstellen, dass sie auch aufgenommen werden? Und ich nicht die Fehlermeldung von MatLab bekomme:

Fehlermeldung:
??? Error using ==> mysql
Must give one output argument for each column


Mein bisheriger Code:
Code:

nNumberOutputVar = numel(sFieldsDB);
cMySQLImprt=mysql(sprintf('%s',sMySQLImprt));
 


Ich weiß, dass alle von 'mysql' ausgeworfenen Variablen genau gleich lang sind und letztendlich sollen sie eh in genau eine Matrix.


Workaround mit Bauchschmerzen:
Klar, wenn ich zur Zeit, wo ich den Code programmiere genau wüsste, dass 'mysql' z.B. genau drei Variablen a,b,c auswerfen wird, so könnte ich den folgenden Code schreiben:

Code:

nNumberOutputVar = 3;
[a,b,c]=mysql(sprintf('%s',sMySQLImprt));
cMySQLImprt=[a,b,c];
 



Es wäre wunderbar, wenn mir jemand einen Tipp geben könnte, wie ich mein Problem vermeiden und alle ausgeworfenen Variablen (bzw. ihren Inhalt) in eine große Matrix zusammenfügen könnte.

Es dankt,
eisvogel_2


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 09:21     Titel:
  Antworten mit Zitat      
Wenn die Variablen alle gleich lang sind, kannst Du doch einfach per size die Zeichen zählen lassen und daraus folgern, wie viele Variablen zurückgekommen sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
eisvogel_2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 11:25     Titel:
  Antworten mit Zitat      
Hallo Epfi,

vielen Danke für Deine schnelle Antwort; die Anzahl der Variablen, die zurückkommen werden, ist dem Code zur runtime kurz vorher bereits bekannt. Leider scheint mir das Vokabular zu fehlen mein Problem eindeutig zu beschreiben. Tut mir leid. Embarassed

Kurz bevor mein Code die Funktion aufruft, weiß er, wie viele unterschiedliche Variablen (a,b,c,d, ...) der gleichen Länge zurückgegeben werden. Die Daten, die von der Funktion 'mysql' kommen, scheinen zu erwarten, dass mehrere Variablen quasi als Auffangsvariablen zur Verfügung stehen. Stelle ich nur eine Variable zur Verfügung, wie hier gezeigt, so bekomme ich eine Fehlermeldung:

Code:

nNumberOutputVar = numel(sFieldsDB);
cMySQLImprt=mysql(sprintf('%s',sMySQLImprt)); %<-- erzeugt Fehler
 



Soll heißen, wenn 'nNumberOutputVar' z.B. gleich vier wäre, so müsste die korrekte nächste Codezeile lauten:
Code:

[a b c d]=mysql(sprintf('%s',sMySQLImprt));
 


... wäre 'nNumberOutputVar' jedoch nur gleich zwei, so müsste die korrekte nächste Codezeile lauten:
Code:

[a b]=mysql(sprintf('%s',sMySQLImprt));
 



Wie kann ich also eine bestimmte Anzahl an Variablen zur Laufzeit generieren, von der ich zur Zeit des Schreibens des Codes, gar nicht weiß, wie viele es werden? Letztendlich würde ich diese Variablen sowieso wieder zu einer großen Matrix zusammenfügen müssen. Wie oben beschrieben kann ich jedoch nicht nur eine Variable 'cMySQLImprt' dafür abstellen. Crying or Very sad

Ein dankt für die Mühe,
eisvogel_2
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 11:49     Titel:
  Antworten mit Zitat      
Ahh, verstehe :)

Du kannst mit Hilfe der Funktion eval() einen String als Matlab-Befehl ausführen lassen. Das heißt, Du erstellst Dir zunächst einen String, in dem dein Befehl steht, wirfst den auf eval() und dann wird er ausgeführt.

Damit kannst Du den Befehl mit so vielen Output-Variablen, wie benötigt zusammenstöpseln und anschließend ausführen.
Private Nachricht senden Benutzer-Profile anzeigen
 
eisvogel_2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 12:05     Titel:
  Antworten mit Zitat      
Very Happy Oh, super, ich glaube, das ist genau das, was ich suche!

So, jetzt lese ich mir die techn. Anleitung dazu noch einmal genau durch und versuche es dann zu implementieren. Ja, das sollte klappen!

Vielen lieben Dank für Deine Hilfe,

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