Verfasst am: 22.10.2014, 00:50
Titel: Problem mit xlsread
Hey Leute,
ich verzweifle hier gerade...Habe mir ein Skript geschrieben, das aus Excel liest und schreibt. Das funktioniert bei den ersten beiden Excel Dateien auch einwandfrei. Wenn ich das Skript jedoch auf die dritte Datei anwende, bekomme ich folgende Fehlermeldung:
Datum = raw(2:end,1);
Zeit = raw(2:end,3);
BR = raw(2:end,4);
BR_DEP = find(ismember(BR,'D')); % hier D mit A ersetzen um Arrivals zu ehalten
Datum_DEP = Datum(BR_DEP);
for i = 1:1:31 if i<10
Monat_einzel{i} = find(ismember(Datum_DEP,['0',num2str(i),'.10.2013']));
else
Monat_einzel{i} = find(ismember(Datum_DEP,['',num2str(i),'.10.2013']));
end
Uhrzeit_hauefig{i} = Zeit(Monat_einzel{1,i});
[a{i},b{i}] = hist(str2double(Uhrzeit_hauefig{1,i}),unique(str2double(Uhrzeit_hauefig{1,i})));
a{1,i} = a{1,i}';
Ich weiß das der Fehler entsteht, weil Matlab aus irgend einem Grund die Daten anders ausliest. Kann mir wer einen Hinweis geben, woran es liegen kann? Ich glaube es liegt an der Formatierung der Excel Datei, die allerdings genauso ist, wie bei anderen Excel Dateien. Und eben diese funktionieren ja mit dem Code...deswegen kann ich den Grund nicht finden. :/
Viele Grüße,
Dexter
edit: habe mal einen Teil der Dateien angehängt. Wie die Dateinamen sagen, funktioniert das eine mit dem Code und das andere nicht.
das liegt daran, dass da NaNs vorkommen, ich kann es nicht erklären warum.
z.B. bei deiner angehängten Dateien werden 213871 Zeilen eingelesen, obwohl dort nur 13 Zeilen stehen. Hast du die Daten rausgelöscht? Liegt es vielleicht daran, dass da die Zeilen bleiben trotzdem weiterhin so formatiert?
auf jedenfall wurde ich empfehlen statt ISMEMBER STRNCMP zu nutzen
sry für die späte Antwort. Ja das sind nicht exakt die Dateien die ich benutze. Ist genau der Aufbau, allerdings mit nur wenigen Zeilen. Die anderen Dateien die ich habe sehen ja exakt genauso aus. An den NaNs sollte es also eigentlich nicht liegen.
Habe das sowieso erstmal mit textscan und der Datei als txt gelöst, was einwandfrei funktioniert. Hätte mich halt trotzdem interessiert. Ist strcmp deutlich schneller als ismember?
[quote="Dexter"]sry für die späte Antwort. Ja das sind nicht exakt die Dateien die ich benutze. Ist genau der Aufbau, allerdings mit nur wenigen Zeilen. Die anderen Dateien die ich habe sehen ja exakt genauso aus. An den NaNs sollte es also eigentlich nicht liegen.
[quote]
Doch das liegt daran das in BR-Variable die NaNs vorkommen, die Fehlermeldung besagt ja, dass in Cell unterschiedliche Formate sind. Du nutzt ja nur den dritten Ausgabenparameter RAW. RAW kann ja alle Formate enthalten. Deine Tabelle ist aber als Text formatiert, also kann zum anderen Format nur kommen, dass die Leerzeilen mit eingelesene werden, diese werden in RAW als NaN dargestellt.
Warum die Leerzeilen mit eingelesen werden kann ich nicht beantworten.
Jedenfalls hättest du das Problem umgehen können in dem du den zweiten Ausgabeparameter nutzt, da du ja die Tabellen ja als Text formatiert hast.
so
Datum = txt(2:end,1);
Zeit = txt(2:end,3);
BR = txt(2:end,4);
BR_DEP = find(ismember(BR,'D')); % hier D mit A ersetzen um Arrivals zu ehalten
Datum_DEP = Datum(BR_DEP);
for i = 1:1:31 if i<10
Monat_einzel{i} = find(ismember(Datum_DEP,['0',num2str(i),'.10.2013']));
else
Monat_einzel{i} = find(ismember(Datum_DEP,['',num2str(i),'.10.2013']));
end
Uhrzeit_hauefig{i} = Zeit(Monat_einzel{1,i});
[a{i},b{i}] = hist(str2double(Uhrzeit_hauefig{1,i}),unique(str2double(Uhrzeit_hauefig{1,i})));
a{1,i} = a{1,i}';
Habe das sowieso erstmal mit textscan und der Datei als txt gelöst, was einwandfrei funktioniert. Hätte mich halt trotzdem interessiert. Ist strcmp deutlich schneller als ismember?
ISMEMBER hat einfach andere Funktionsweise, ISMEMBER schaut ob Liste1 in Liste2 vorkommt, also cellstr in cellstr
Bei dieser Aufgabe ist natürlich STRCMP schneller als ISMEMBER:
Zitat:
>> tic, for k=1:100000, ismember({'Word1', 'Word2', 'Word3'}, {'Word1'} );end; toc
Elapsed time is 3.339804 seconds.
>> tic, for k=1:100000, strcmp({'Word1', 'Word2', 'Word3'}, 'Word1' );end; toc
Elapsed time is 0.165289 seconds.
Und auch robuster, weil ISMEMBER kann nur mit CELLSTR umgehen, STRCMP ignoriert andere Formate in CELL, explizit nach Doubles mit STRCMP kann man aber nicht suchen:
Code:
%
ismember({NaN, 'test'}, 'test') % kommt zum Fehler: % Error using cell/ismember
Bei deiner Aufgabe würde ich STRCMP statt ISMEMBER verwenden oder REGEXP
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
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.