|
|
einlesen größerer datei mit verschiedenen daten |
|
smaica |

Forum-Century
|
 |
Beiträge: 105
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.10.2012, 10:13
Titel: einlesen größerer datei mit verschiedenen daten
|
 |
|
 |
|
Hallo,
ich möchte mehrere Excel-Dateien (habe sie durchnummeriert) automatisch einlesen in Matlab, verschiedene Werte daran bearbeiten und dann als .mat datei wieder abspeichern. Ich habe nun das Problem, dass ich als Spalteneinträge nicht nur Zahlen, sondern auch Datum und Uhrzeit (in Spalte 1 bis 3) habe sowie in der ersten Zeile die Überschriften als String.
Das automatische einlesen und abspeichern habe ich beispielhaft gemacht über
for i=1:N
[nums, txt, raw] = xlsread(['test', num2str(i), '.xlsx']);
save(['versuch', num2str(i), '.mat']);
end
nun habe ich das problem, dass datum sowie uhrzeit natürlich nicht richtig gespeichert sind, also auch gibt es in der Datei versuch.mat nun 3 Einträge (nums, txt, raw) mit denen ich aber nicht weiterarbeiten kann.
Ich müsste als erstes in der Datei versuch.mat eine Matrix erzeugt bekommen, die genauso aussieht wie die excel-tabelle und dann muss ich die Uhrzeiten bearbeiten können und sie dann trotzdem wieder als Uhrzeit angegeben haben und nicht als Gleitkommazahl. Kann mir da jemand helfen?
LG
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.10.2012, 13:26
Titel: Re: einlesen größerer datei mit verschiedenen daten
|
 |
Hallo smaica,
Herzlich willkommen im Forum!
Es gibt hier sehr viele Beiträge über Excel und Uhrzeiten. Eine Suche im Forum würde sich sicherlich lohnen.
Gruß, Jan
|
|
|
smaica |
Themenstarter

Forum-Century
|
 |
Beiträge: 105
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.10.2012, 18:58
Titel:
|
 |
hallo,
danke fürs antworten. ich habe mich schon mehrere tage durchs forum gelesen, aber bekomme es trotzdem nicht hin. es gibt immer nur sehr spezielle antworten auf spezielle fragestellungen. wie funktioniert es denn generell wenn ich dem programm sagen will, dass ich mehrere spalten einlesen will mit verschiedenem inhalt und die erste zeile dabei sozusagen überspringe und seperat einlese? einfach nur groß die struktur des einlesebefehls.
liebe grüße
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.10.2012, 22:17
Titel:
|
 |
Hallo smaica,
Die Standard-Groß/Klein-Schreibung macht das Lesen einfacher.
Sehr generelle Fragen lassen sich nur mit sehr großem Aufwand beantworten. Es ist ja nicht klar, was an den Erklärungen in "help xlsread" und "doc xlsread" nicht hinreichend geklärt worden ist.
Zitat: |
nun habe ich das problem, dass datum sowie uhrzeit natürlich nicht richtig gespeichert sind, ... |
Wieso sind die nicht "richtig" gespeichert? Wie sind sie gespeichert und was ist "richtig"?
Zitat: |
Ich müsste als erstes in der Datei versuch.mat eine Matrix erzeugt bekommen, die genauso aussieht wie die excel-tabelle... |
Das geht nicht. Ein MAT-File enthält Variablen in binärer Form. Das kann nicht "so aussehen" wie eine Excel-Tabelle. Was genau benötigst Du also?
Gruß, Jan
|
|
|
smaica |
Themenstarter

Forum-Century
|
 |
Beiträge: 105
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 10:18
Titel:
|
 |
|
 |
|
Ok, auf jeden Fall vielen Dank, dass du mir versuchst zu helfen. Dann Schritt fur Schritt.
Ersteinmal will ich aus der Exceltabelle die Spalten einlesen, davon sind die erste und die Zeite Datum bzw. Uhrzeit.
Ich kann die Exceltabelle (.xlsx) ja nicht mit fopen, fscan usw bearbeiten, da es keine Textdatei ist. Bei xlsread weiß ich aber nicht wie man für die einzelnen Spalten angeben kann welche Formate die Einträge besitzen, ich habe zuvor die mir Exceltabellen in Matlab gearbeitet.
Wenn ich (ohne angabe von Formaten) mit xlsread arbeite, dann wird aus Datum eine 5 stellige, durchnummerierte Zahl und aus Zeit eine Kommazahl. Ich will diese Zahlen wieder umwandeln können in Datum der Art (dd.mm.jj) und Zeit in (hh:mm:ss), damit man in Grafiken nachvollziehbare Werte auf der Zeitachse hat.
Außerdem muss ich mit den Zeiten rechnen (Minuten bzw Stunden addieren/subtrahieren für bestimmte Tage).
Das Problem die Überschriten als String und den sonstigen (Zahlen)Werte in eine Datei zu schreiben habe ich versucht mit:
[nums, txt] = xlsread([test_1.xlsx']);
save (['versuch_1.mat'], [txt; nums]);
hat aber nicht geklappt (Fehlerausgabe: Error using vertcat
Dimensions of matrices being concatenated are not consistent.)
MfG
smaica
p.s.: ich habe versucht die Spalten mit Datum- und Zeitangabe zu selektieren um einzeln nur mit den Spalten rechnen zu können, aber das umrechnen will einfach nicht klappen:
[zeilen spalten] = size(raw);
datum=raw(2:zeilen,1);
datumsangabe=(datestr(datum,'dd.mm.yyyy'));
zeitvon=raw(2:zeilen,2);
zeitbis=raw(2:zeilen,3);
zeitvonangabe=(datestr(zeitvon,'HH:MM:SS'));
zeitbisangabe=(datestr(zeitbis,'HH:MM:SS'));
gibt als antwort:
Error using datestr (line 178)
Cannot convert input into specified date string.
DATENUM failed.
Error (line 2
datumsangabe=(datestr(datum,'dd.mm.yyyy'));
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 11:13
Titel:
|
 |
|
 |
|
Hallo smaica,
Zitat: |
Bei xlsread weiß ich aber nicht wie man für die einzelnen Spalten angeben kann welche Formate die Einträge besitzen, ... |
Gar nicht, denn das hat man ja bereits in Excel gemacht.
XLSREAD erzeugt drei Outputs. Im ersten stehen die numerischen Werte, was ja bei Datums nur funktioniert, wenn das serielle Zeitformat genutzt iwrd. Dies kann man relative einfach in Matlab's serielles Zeitformat umrechnen. So weit ich mich erinnere (genaueres unter "help xlsread" und "doc xlsread"), enthält der 3. Output ein Cell mit den Roh-Daten. Dort kannst Du die Datums wohl auch als String finden und per DATENUM und DATEVEC konvertieren.
Für die Umrechnung des seriellen Zeit-Formats von Excel nach Matlab kannst Du selbst im Netz suchen: Frage z.B. google nach "Matlab Excel serial date".
Der SAVE Befehl erwartet die Namen der zu speichernden Variablen als Strings. Also statt "save (['versuch_1.mat'], [txt; nums]);":
Wenn die Umwandlung mit "datestr(datum,'dd.mm.yyyy'))" nicht Funktioniert, solltest Du Dir den Inhalt von "datum" genauer anschauen.
Gruß, Jan
|
|
|
smaica |
Themenstarter

Forum-Century
|
 |
Beiträge: 105
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 13:05
Titel:
|
 |
|
 |
|
Hallo,
das mit dem speichern klappt jetzt wunderbar, vielen Dank!
Ich bin mittlerweile dabei angekommen, dass es am besten ist mit dem Rechnen, wenn ich das Datum in einen Vektor schreibe mit datavec.
Mein Datum habe ich eingelesen über:
[nums, txt, raw] = xlsread(test.xlsx);
[zeilen spalten] = size(raw);
datum=raw(2:zeilen,1);
es ist jetzt mit der angabe dd.mm.yyyy in matlab eingelesen wurden in dem Vektor datum.
wenn ich jetzt versuche auch nur einen einzigen Eintrag des Vektors "datum" (später muss ich wahrscheinlich über eine Schleife alle Werte einlesen?!) mit diesem Befehl in einen Vektor zu schreiben:
c=datevec(datum(1))
dann kommt als Fehler:
Error using datevec (line 277)
Cannot parse date 01.06.2012.
ich kann mir nicht erklären warum?!
Liebe Grüße
(p.s. die Schleife habe ich mir dann so gedacht:
index=1
for j=1:length(datum)
datumsangabe(index)=datevec(datum(j))
index=index+1
end
aber das schreibt leider auch mit anderen Befehlen nicht in einen Vektor namens datumsangabe)
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 14:53
Titel:
|
 |
Hallo smaica,
Bitte benutze für Code die Code-Umgebung: Einfach den Code mit der Maus markieren und den "Code" Button drücken.
Versuche mal dies:
Deine Schleife kann man verbessern:
Gruß, Jan
|
|
|
smaica |
Themenstarter

Forum-Century
|
 |
Beiträge: 105
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.10.2012, 16:52
Titel:
|
 |
Hallo Jan,
vielen lieben Dank, das Einlesen klappt jetzt hervorragend und ich kann endlich mit den Daten arbeiten.
Du hast mir sehr geholfen,
schönen Sonntag noch!
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|