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

Evalin mit mehreren Variablen

 

Philipp68
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 31.07.2017, 10:05     Titel: Evalin mit mehreren Variablen
  Antworten mit Zitat      
Hallo,
kann man in den Befehl "evalin" mehrere Variablen aus dem Workspace einfügen?
Bsp. x = evalin('base','Var1','Var2',...)
x möchte ich später als Liste in eine Excel-Datei schreiben.
Oder muss ich jedes mal den Befehl einzeln schreiben?
Lg Smile
Private Nachricht senden Benutzer-Profile anzeigen


Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 31.07.2017, 13:10     Titel:
  Antworten mit Zitat      
Ich habe jetzt alle 24 Variablen einzeln aufgeschrieben. Zusätzlicher "Fehler" ist, dass nur die Endung der Variablen eine Nummerierung ist (LED1,LED2,...). Besser wäre ein Array mit allen Werten zu erstellen. Dadurch erhält man nur eine Variable für ein Array und somit nur ein "evalin" Befehl.
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: 01.08.2017, 11:51     Titel:
  Antworten mit Zitat      
Hallo Philipp68,

Stimmt. Definiere dann doch einfach "LED(1)", "LED(2)" oder falls nötig ein Cell-Array mit "LED{1}" usw. Allerdings ist das ferngesteuerte erzeugen von Variablen per evalin sowieso keine gute Idee. Bist Du wirklich sicher, dass es nützlich ist die Variablen im Base-workspace zu erzeugen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 01.08.2017, 12:33     Titel:
  Antworten mit Zitat      
Die Variablen befinden sich im Base-Workspace und benötige diese für eine button-function. Habe es nun so, auch eher umständlich, umgesetzt.

Code:

function SaveConfig(hObject,event, handles)
Value_1 = evalin('base','Value_1');
Value_2 = evalin('base','Value_2');
Value_3 = evalin('base','Value_3');
Value_4 = evalin('base','Value_4');



a = evalin('base','LEDStatus1');
b = evalin('base','LEDStatus2');
c = evalin('base','LEDStatus3');
d = evalin('base','LEDStatus4');
e = evalin('base','LEDStatus5');
f = evalin('base','LEDStatus6');
g = evalin('base','LEDStatus7');
h = evalin('base','LEDStatus8');
i = evalin('base','LEDStatus9');
j = evalin('base','LEDStatus10');
k = evalin('base','LEDStatus11');
l = evalin('base','LEDStatus12');
m = evalin('base','LEDStatus13');
n = evalin('base','LEDStatus14');
o = evalin('base','LEDStatus15');
p = evalin('base','LEDStatus16');
q = evalin('base','LEDStatus17');
r = evalin('base','LEDStatus18');
s = evalin('base','LEDStatus19');
t = evalin('base','LEDStatus20');
u = evalin('base','LEDStatus21');
v = evalin('base','LEDStatus22');
w = evalin('base','LEDStatus23');
x = evalin('base','LEDStatus24');


LEDS = {'Time of Measurement','Time of flicker light','Start of flicker light','SMD-LED Intensity','LED 1','LED 2','LED 3','LED 4','LED 5','LED 6','LED 7','LED 8',...
    'LED 9','LED 10','LED 11','LED 12','LED 13','LED 14','LED 15',...
    'LED 16','LED 17','LED 18','LED 19','LED 20','LED 21','LED 22','LED 23',...
    'LED 24';Value_1,Value_2,Value_3,Value_4,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x};

sheet = 1;
xlRange1 = 'A1';

xlswrite(['Configuration_',datestr(now,'mmmm dd, yyyy HH-MM-SS'),'.xlsx'],LEDS,sheet,xlRange1);

end
 
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: 01.08.2017, 18:47     Titel:
  Antworten mit Zitat      
Hallo Philipp68,

Ich kann nur dringend von solchem Nudel-Code warnen. Das ist sehr unübersichtlich und zieht Tippfehler an wie ein Magnet. Sowie man das um 22 weitere Daten ergänzen möchte, wird es zum Horror.
Nummerierte Variablen sind immer ein fieser Schuss ins eigene Knie. Aber wenn Du das unbedingt möchtest, mach es wenigstens in einer Schleife:
Code:
function SaveConfig(hObject,event, handles)
Value = cell(1, 4);
for k = 1:4
  Value{k} = evalin('base', sprintf('Value_%d', k));
end

LEDStatus = cell(1, 24);
for k = 1:24
  LEDStatus{k} = evalin('base', sprintf('LEDStatus%d', k));
end

head = cat(2, {'Time of Measurement','Time of flicker light','Start of flicker light','SMD-LED Intensity'}, ...
                       sprintfc('LED %d', 1:24));
data = cat(2, Value, LEDStatus);

LEDS = cat(1, head, data);

sheet = 1;
xlRange1 = 'A1';
xlswrite(['Configuration_',datestr(now,'mmmm dd, yyyy HH-MM-SS'),'.xlsx'],LEDS,sheet,xlRange1);
end

Und wenn die Variablen erst gar nicht nummeriert wären, sondern gleich als Arrays definiert wären, sähe das noch einfacher aus. Falls Du diesen Code auf 768 LEDs erweitern möchtest, müsstest Du nur die beiden "24" ersetzen.

Und am besten wäre es, die Variablen würden erst gar nicht den Base-Workspace verschandeln, denn dort sind sie wie globale Variablen von überall her überschreibbar. Falls Probleme auftreten ist das Debuggen deswegen ausgesprochen zeitraubend und lästig. Dass Du die Daten im Base-Workspace "für eine button-function benötigst", ist vielleicht gar nicht so praktisch. Ich vermute, auch diese "button-function" (was immer das auch genau ist), lässt sich ebenso vereinfachen und ohne globalen Zugriff auf den Base-Workspace umschreiben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 03.08.2017, 12:30     Titel:
  Antworten mit Zitat      
Hallo Jan,
vielen Dank, dass du dir die Mühe gemacht hast, den Code für meine Nummerierung zu schreiben. Mit einem Array und das es damit viel einfacher ist gebe ich dir zu 100% recht. Habe am Anfang nicht daran gedacht und werde es für die Zukunft anders machen.
Lg
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.