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

Problem mit datenum in R2016b

 

brainstorming
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2016, 20:01     Titel: Problem mit datenum in R2016b
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem: Der Code funktioniert auf 2016a und auf Windows, aber unter 2016b und Mac muss ich den zum laufen bringen:

Code:


%1.Datei auswählen [Excel-Datei, Tabellenblatt Name]
[num,txt,raw] = xlsread('testfile','CD');

%2.Festlegung Untersuchungszeitraum
Startdatum = input('Start d. Analyse?[dd.mm.yyyy]: ','s');
Enddatum = input('Ende d. Analyse?[dd.mm.yyyy]: ','s');

%3.Erstellung Sicherung der Matrix -> Matrix raw enthält alle unbearbeiteten
%Kurse der Exceldatei
raw2=repmat(raw,1);

%4.Hilfsvariable um NaN zu identifizieren; Zellen mit Wert 1 haben in der
%Matrix raw2 den Wert NaN
identNaN = cellfun(@isnan, raw2, 'UniformOutput', false);

%5.Dimension/Anzahl Zeilen/Spalten speichern: Muss ca. 7660 Zeilen lang sein
%Spalten abhängig vom gewählten index
dimension = size(raw2);
zeilenanzahl = dimension(1);
spaltenanzahl = dimension(2);

%Eingegebenes Datum in Dateformat formatieren
date1 = datenum(Startdatum,'dd.mm.yyyy');
date2 = datenum(Enddatum,'dd.mm.yyyy');
SpalteDatum = raw2(:,1);

%Erste Zeile mit Namen der Werte löschen -Notwendig für Formatierung in
%Dateformat
SpalteDatum(1,:)=[];
formatIn = 'dd.mm.yyyy';
SpalteDatum = datenum(SpalteDatum,formatIn);
 

usw usw.

Problem: Ich gebe das Startdatum ("01.01.1990") und das Enddatum ("02.05.2005") ein, und erhalte in 2016b folgende Fehlermeldung:

Error in auswerten (line 32)
SpalteDatum = datenum(SpalteDatum,formatIn);


Caused by:
Error using datenum (line 109)
The input to DATENUM was not an array of character vectors.



Auf Matlab 2016a funktioniert es, auf div. Vorgängern auch. Allerdings hilft mir das aktuell nicht weiter...

Hat jemand Ideen?
DANKE!!!
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: 24.09.2016, 21:50     Titel:
  Antworten mit Zitat      
Hallo,

das kann sowohl an den unterschiedlichen Versionen als auch an Windows vs. Mac liegen.
Ohne die Datendatei lässt sich das Problem nicht nachstellen.

Was ist denn der Inhalt von Spaltedatum vor dieser Zeile?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
brainstorming
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2016, 08:46     Titel:
  Antworten mit Zitat      
Hallo Harald,

anbei die Datendatei.

Wobei Matlab doch immer Matlab ist, egal ob ich es auf Windows oder Mac verwende?
VG
Patrick

testfile.xls
 Beschreibung:
testdatei

Download
 Dateiname:  testfile.xls
 Dateigröße:  1.1 MB
 Heruntergeladen:  529 mal
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: 25.09.2016, 10:50     Titel:
  Antworten mit Zitat      
Hallo brainstorming,

Matlab ist zwar Matlab, aber XLSREAD greift auf Excel-Bibliotheken zurück, und da hört die Macht von Matlab auf und Microsoft übernimmt. Auf PCs wird Excel über ActiveX verwendet, auf dem Mac steht das nicht zur Verfügung.

Du könntest an der Fehlermeldung ansetzen:
Zitat:
The input to DATENUM was not an array of character vectors.

Welchen Typ verwendest Du denn als Input?
Code:
class(SpalteDatum)
Types = cellfun(@class, SpalteDatum, 'uni', false);
disp(unique(Types))

Enthält SplateDatum also nur Strings?

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2016, 12:44     Titel:
  Antworten mit Zitat      
habe das jetzt mal in das Script eingefügt.
Enthält "double", und bei einem Wert wird nichts angezeigt.
Code:
   
    'double'
    'double'
    'double'

    'double'

Error using datenum (line 181)
DATENUM failed.

Error in auswerten (line 35)
SpalteDatum = datenum(SpalteDatum,formatIn);


Caused by:
    Error using datenum (line 109)
    The input to DATENUM was not an array of character vectors.


Kann ich den Datentyp irgendwie ändern?
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: 25.09.2016, 18:06     Titel:
  Antworten mit Zitat      
Hallo,

das Problem dürfte wie von Jan vermutet in der Problematik von .xls auf einem Rechner ohne Excel liegen. Dazu aus der Doku:
Zitat:
xlsread imports formatted text representing dates (such as '10/31/96'), except in basic mode and on computers without Excel for Windows.


Ich kann das morgen mal unter Windows auf R2016b testen.

Zwischenzeitliche Vorschläge an dich:
- schau dir Datumspalte doch mal im Workspace an. Welche Double-Werte enthält die Variable denn?
- speichere Datumspalte mal in einer .mat-Datei ab und hänge das hier an. Dass ein Eintrag keinen Datentyp hat, ist merkwürdig.
- versuch mal readtable. Das sollte in R2016b Datumsangaben automatisch als datetime repräsentieren. Ob das ohne Excel richtig funktioniert, habe ich aber noch nicht versucht.

Grüße,
Harald
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: 26.09.2016, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

unter Windows und mit installiertem Excel läuft der Code unter R2016b durch.

Ich habe auch mal den 'basic'-Modus versucht, der laut Doku bei Macs verwendet wird. Dann kommen die Datumsangaben als Excel-Zahlen nach MATLAB. Die Umwandlung ist so möglich:
Code:
SpalteDatum = cell2mat(SpalteDatum);
D = datetime(SpalteDatum, 'ConvertFrom', 'Excel');


Das Problem der Komponente ohne Datentyp habe ich nicht. Da wäre also die Bitte: speichere Datumspalte mal in einer .mat-Datei ab und hänge das hier an. Ansonsten wie gesagt mal readtable versuchen.

Welches Betriebssystem verwendest du genau?

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.