Verfasst am: 31.07.2017, 10:05
Titel: Evalin mit mehreren Variablen
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
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.
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?
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};
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);
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.
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
Einstellungen und Berechtigungen
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
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.