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

Externes einlesen eines Excel files ins Matlab

 

tommylabamba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2015, 14:02     Titel: Externes einlesen eines Excel files ins Matlab
  Antworten mit Zitat      
Hallo,

ich möchte gerne ein externes .xls file aus dem Internet ins Matlab einlesen.

Die Fakten zur Problemstellung:
- Link: http://...../data.xls
- 1.-12. Zeile ist nur Text den ich nicht brauche
- ab 13. Zeile beginnen die Daten
- 1. Spalte Datum in Format MM/JJJJ
- 2. Spalte ist Wert mit z.B. 2,4 (Achtung: Komma ist in .xls file, in Matlab soll es natürlich Punkt sein, welches als Kommazahl gewertet wird)
- das Datum soll anschließend mit date2num umgewandelt werden, allerdings kennt Matlab dieses 'MM/JJJJ" Format nicht.

Jemand eine Idee?
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: 21.07.2015, 15:54     Titel: Re: Externes einlesen eines Excel files ins Matlab
  Antworten mit Zitat      
Hallo tommylabamba,

Wie wäre es mit urlread , xlsread und dann einer Auswertung der Daten?

Was hast Du bisher versucht und hast Du eine konkrete Frage dazu?
Bisher ist eine Hilfe noch schwer möglich.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2015, 17:59     Titel: Re: Externes einlesen eines Excel files ins Matlab
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo tommylabamba,

Wie wäre es mit urlread , xlsread und dann einer Auswertung der Daten?

Was hast Du bisher versucht und hast Du eine konkrete Frage dazu?
Bisher ist eine Hilfe noch schwer möglich.

Gruß, Jan


Also ich habe schon versucht zuerst mit fopen die Datei, die über einen link direkt abgerufen wird, temporär zu öffnen und die Daten auszulesen.
fopen funktioniert aber nur mit .txt. .csv. Bei .xls geht das nicht.

Hier der Code der bei .csv (horizontale Datentrennung durch , Delimiter) funktioniert und bei yyyy-mm-dd Datums Format:

Code:
urlwrite(link, datei.csv);
i = fopen(datei.csv);
data = textscan(i, '%s %f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(i);

data = datenum(data(:,1), 'yyyy-mm-dd');


xlsread dagegen funktioniert nur, wenn die Datei bereits im Matlab Current Folder ist. Das ist sie aber nicht. Sie wird ja aus dem Internet abgerufen.

Vor xlsread muss also ein Zwischenschritt her, nur welcher? Die .xls Datei entweder abrufen, speichern und ins .dat überführen oder die .xls Datei öffnen, temporär auslesen, ins .dat überführen und die eigentliche .xls Datei verwerfen.
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: 22.07.2015, 09:45     Titel: Re: Externes einlesen eines Excel files ins Matlab
  Antworten mit Zitat      
Hallo tommylabamba,

Zitat:
Also ich habe schon versucht zuerst mit fopen die Datei, die über einen link direkt abgerufen wird, temporär zu öffnen und die Daten auszulesen.
fopen funktioniert aber nur mit .txt. .csv. Bei .xls geht das nicht.

Bitte poste den Code, anstatt ihn zu beschreiben.
fopen ist für lokal Files gedacht. Es funktioniert mit .xls Files genauso wie für alle anderen Files, deshalb weiß ich nicht, was Du mit "geht nicht" meinst. Bitte erkläre immer, was genau passiert, statt nur "geht nicht" o.ä. zu schreiben.
Für Files im Netz ist fopen jedenfalls nicht gedacht, sondern urlread / urlwrite .

Zitat:
Code:
urlwrite(link, datei.csv);
i = fopen(datei.csv);
data = textscan(i, '%s %f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(i);

Das ist sehr seltsam. Was ist "link"? Hast Du Quotes um "datei.csv" vergessen oder ist "datei" ein Struct und ".csv" ein Feld davon?
Ich dachte, es geht um ein .xls File?

Zitat:
xlsread dagegen funktioniert nur, wenn die Datei bereits im Matlab Current Folder ist. Das ist sie aber nicht. Sie wird ja aus dem Internet abgerufen.

Verwende einfach absolute Pfadnamen für die Files. Das ist deutlich sicherer als sich einfach darauf zu verlassen, wo der aktuelle Pfad gerade ist.

Zitat:
Vor xlsread muss also ein Zwischenschritt her, nur welcher? Die .xls Datei entweder abrufen, speichern und ins .dat überführen oder die .xls Datei öffnen, temporär auslesen, ins .dat überführen und die eigentliche .xls Datei verwerfen.

Woher kommen denn nun die ".dat" Files? Wozu soll das "überführt" werden?

Wie wäre es damit:
Code:
URL = 'http://my.server.de/File.xls';  % Anpassen
File = fullfile(tempdir, 'File.xls');
urlwrite(URL, File);
Data = xlsread(File);

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 16:09     Titel: Re: Externes einlesen eines Excel files ins Matlab
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:


Wie wäre es damit:
Code:
URL = 'http://my.server.de/File.xls';  % Anpassen
File = fullfile(tempdir, 'File.xls');
urlwrite(URL, File);
Data = xlsread(File);

Gruß, Jan


Vielen herzlichen Dank Jan. Very Happy
Das klappt jetzt!
Der Befehl fullfile ist mir neu, kannte ich nicht.

Weißt Du vielleicht noch eine Lösung wie ich den Datum-String "MM/JJJJ" in Monat und Jahr spalten kann und als einen Wert mit date2num umwandeln kann.

z.B. ich habe den Wert 09/2014 als String. Möchte aber einen Wert haben, z.B. 72323 wobei dieser Wert für das Datum 01/09/2014 steht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.07.2015, 16:24     Titel:
  Antworten mit Zitat      
Hallo,

Code:
d = datenum('09/2014', 'mm/yyyy')
datestr(d)


Ab R2014b bietet datetime übrigens eine schöne Alternative, weil man nicht ständig hin- und herwandeln muss.

Grüße,
Harald
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.