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

mit eval Daten in Matrix einlesen

 

JN78
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 69
Anmeldedatum: 18.05.09
Wohnort: Stuhr
Version: R2010b, R2011a
     Beitrag Verfasst am: 09.08.2010, 20:22     Titel: mit eval Daten in Matrix einlesen
  Antworten mit Zitat      
Guten Abend zusammen,

ich komme mit der "eval" Funktion irgendwie nicht wirklich klar.
Folgende Ausgangssituation:

Ich habe einige tausend Files, von denen ich immer einen bestimmten Bereich in eine Matrix einlesen möchte. Der Filename ist in dieser Form "2009_12_08_15_30_00_DATA.csv" alle 10 Minuten gibt es ein neues File, also:

- 2009_12_08_15_30_00_DATA.csv
- 2009_12_08_15_40_00_DATA.csv
- 2009_12_08_15_50_00_DATA.csv
- 2009_12_08_16_00_00_DATA.csv
usw.

Momentan mache ich das manuell in folgender Form:

- tempdata1 = dlmread('2009_12_08_15_30_00_DATA.csv', ';', 761, 0);
- tempdata2 = dlmread('2009_12_08_15_40_00_DATA.csv', ';', 761, 0);
- tempdata3 = dlmread('2009_12_08_15_50_00_DATA.csv', ';', 761, 0);

das wollte ich automatisieren und hab es wie folgt im Kleinen testweise probiert, leider ohne Erfolg.

for n=20:10:50
eval(['tempdata_',num2str(n),'= ', 'dlmread('2009_12_08_15_30_00_DATA.csv', ';', 761, 0)]);
end

Ich suche mir jetzt schon seit einigen Stunden einen Wolf und werde einfach nicht fündig. Wäre schön, wenn mir einer von Euch helfen könnte.

Im nächsten Schritt würde ich das gerne soweit automatisieren, dass Dateien mehrere Monate eingelesen werden. Wie gesagt die Dateinamen ändern sich jeweils in "10-Minuten" Schritten.

Vielen Dank für Eure Hilfe

Jan
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: 09.08.2010, 22:23     Titel: Re: mit eval Daten in Matrix einlesen
  Antworten mit Zitat      
Hallo JN78,

JN78 hat Folgendes geschrieben:
ich komme mit der "eval" Funktion irgendwie nicht wirklich klar.

Willkommen im Club. EVAL ist nicht benutzerfreundlich und verleitet zu ineffizientem Programmieren.
Da ich dass nun seit einem Monat täglich 8 mal sage, muss ich doch mal nachfragen, wie Du denn auf EVAL gekommen bist. Dieses Forum wimmelt nur so von Fragen bzgl. EVAL, ASSIGNIN und EVALIN, während z.B. im englischsprachigen CSSM-Forum diese Kommandos nur selten (etwa 1%) auftauchen und auch jedesmal mit einem gemeinschaftlichen "DON'T DO THAT" agberaten wird.

Wird EVAL im deutschsprachigen Raum von Matlab-Dozenten angepriesen, oder gibt es einen mir unbekanntes deutsches Matlab-Tutorial, das für alle möglichen Fälle EVAL anbietet? Ich bin ehrlich verblüfft.

Zitat:
Code:
eval(['tempdata_',num2str(n),'= ', 'dlmread('2009_12_08_15_30_00_DATA.csv', ';', 761, 0)]);

Ja, das dürfte nicht laufen. Bekommst Du denn eine Fehlermeldung?
Schaue Dir mal die Zeile mit Syntax-highlighting im Editor an. der Datei-Name in DLMREAD ist kein String! Du würdest doppelte Quotes benötigen:
Code:
eval(['tempdata_', num2str(n), ' = dlmread(''2009_12_08_15_30_00_DATA.csv'', '';'', 761, 0);']);

Ich rate aber ausdrücklich von EVAL ab. Die während der Laufzeit erzeugten Variablen behindern den effizienten Programmfluß deutlich und die die Übersichtlichkeit ist deutlich reduziert, so dass das Debuggen ohne jeden Vorteil erschwert wird.

Sicherer wäre es, die Variablen z.B. in einem Struct zu sammeln:
Code:
Data.(sprintf('tempdata_%d', n)) =  dlmread('2009_12_08_15_30_00_DATA.csv', ';', 761, 0)]);

SPRINTF is etwas effizienter als die NUM2STR Methode, aber das mach keinen soo großen Unterschied.

Eine andere Idee wäre es, die Daten in einem CELL Array oder falls alle gleich groß sind, in einem Mehrdimensionalen Array zu speichern. Im letzteren Fall wäre auch die Bearbeitung in Matlab ausgesprochen effizient. Einen Wust von unterschiedlichen Variablen per EVAL zusammenzuwürfeln ist dagegen sehr langsam.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 69
Anmeldedatum: 18.05.09
Wohnort: Stuhr
Version: R2010b, R2011a
     Beitrag Verfasst am: 10.08.2010, 07:40     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort. Zu deiner Frage, ich bin auf eval durch Seite 87f "String-Evaluation" im Buch "MATLAB Kompakt" gekommen. Das dort dargestellte schien mir dem was ich gesucht habe am nächsten zu kommen.

Gruß Jan
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: 10.08.2010, 20:29     Titel:
  Antworten mit Zitat      
Hallo Jan 78,

dann werde ich doch mal dem Autor meine persönlichen Grüße schicken ;-)

Gruß, Jan
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.