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 xlsread

 

Dexter
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2014, 00:50     Titel: Problem mit xlsread
  Antworten mit Zitat      
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:

Code:

??? Error using ==> cell.ismember at 28
Input must be cell arrays of strings.

Error in ==> Flug_Tag_1314 at 6
BR_DEP = find(ismember(BR,'D')); % hier D mit A ersetzen um Arrivals zu ehalten
 


Bei folgendem Code (ist nur der Anfang, da er da direkt hängen bleibt und der Rest für das Problem nicht relevant ist.

Code:

[~,~,raw]=xlsread('Flugbewegungen1314.xlsx');

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}';

.
.
.
end
 


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. Sad

Beispiele.rar
 Beschreibung:

Download
 Dateiname:  Beispiele.rar
 Dateigröße:  778.26 KB
 Heruntergeladen:  381 mal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.10.2014, 18:03     Titel:
  Antworten mit Zitat      
Hallo


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
Code:

BR_DEP = find(strncmp(BR,'D',1));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dexter
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2014, 20:22     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.10.2014, 12:38     Titel:
  Antworten mit Zitat      
[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
Code:


[~, txt,~]=xlsread('Flugbewegungen1314.xlsx');

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}';

.
.
.
end

 



Zitat:

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
Code:
ismember({'Word1', 'Word2', 'Word3'}, {'Word1', 'Word3'} )


oder array in array:
Code:
ismember([1 2 3], [1 2] )


STRCMP sucht nur nach einem String in einer Cell.
Code:
strcmp({'Word1', 'Word2', 'Word3'}, 'Word1')


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
 
strcmp({NaN, 'test'}, 'test')

% funktioniert
% ans =
%   0     1


 


Bei deiner Aufgabe würde ich STRCMP statt ISMEMBER verwenden oder REGEXP
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.