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

einlesen größerer datei mit verschiedenen daten

 

smaica
Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.10.2012, 10:13     Titel: einlesen größerer datei mit verschiedenen daten
  Antworten mit Zitat      
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
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: 02.10.2012, 13:26     Titel: Re: einlesen größerer datei mit verschiedenen daten
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.10.2012, 18:58     Titel:
  Antworten mit Zitat      
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
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: 03.10.2012, 22:17     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 10:18     Titel:
  Antworten mit Zitat      
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 2Cool
datumsangabe=(datestr(datum,'dd.mm.yyyy'));
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: 04.10.2012, 11:13     Titel:
  Antworten mit Zitat      
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]);":
Code:
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
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 13:05     Titel:
  Antworten mit Zitat      
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)
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: 04.10.2012, 14:53     Titel:
  Antworten mit Zitat      
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:
Code:
c = datevec(datum, 'dd.mm.yyyy');


Deine Schleife kann man verbessern:
Code:
% index=1;   % Ist nicht nötig, weil j ja ebenfalls von 1 hochzählt!
for j=1:length(datum)
  datumsangabe(j, :) = datevec(datum{j});
% Datum ist ein Cell string -> geschweifte Klammern
% Rechts und links von = müssen stehen jetzt Vektoren. Mit:
% datumsangabe(j) stünde links ein Skalar. Man kann aber keinen Vektor
% in einem Skalar speichern.
end

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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2012, 16:52     Titel:
  Antworten mit Zitat      
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!
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.