Verfasst am: 17.06.2013, 16:39
Titel: alle xls Dateien in andere pfad lesen
Hi.
Ich habe z.B n xls Dateien in andere Pfad('D:\MatlabTestData\-10C\Batt\')
Ich möchte, dass matlab in diesem Pfad rein geht und alle xls Dateien lesen.
Ich habe ne Code geschrieben.(siehe Unten). Der öffnet den Pfad und lies die Dateien in ein str. Das heist, dass ich die Dateien wieder aus diese str raus extrahieren soll.
Kann jemand mir helfen, um diese n Dateien einfach in Workspace bringen und lesen.
Ich danke euch.
Code:
% go to path
source_dir = 'D:\MatlabTestData\-10C\Batt\';
%all files with xls format
source_files = dir(fullfile(source_dir, '*.xls'));
%read all xls file
for i = 1:length(source_files)
data{i,length(source_files)} = xlsread(fullfile(source_dir, source_files(i).name));
Wenn ich nur {i} benutze wird nur einzige excel Datei geöffnet.
Mein Problem ist:
Ich habe z.B mal 3 mal 4 Excel Dateien in ein Ordner. Der Anzahl der Dateien können sich ändern.
Ich möchte, dass Matlab in diese Ordner nach alle xls Dateien sucht und alle diese Dateien liest und in Workspace bringt, um später weiteren Datenoperationen mit diese XLS Spalten statt findet.
Ich erkläre es viel einfacher dies Mal.
In source Ordner habe ich mal 3 oder 4 oder 100 xls Daten mit verschiedenen Namen.
z.B.
Datei1) SpannungBatterie1.xls <995x16 double>
Datei2) SpannungBatterie2.xls <994x16 double>
.und so weiter
Meine Aufgabe ist, dass ich z.B. nächste Woche 3 Spannungswerte bekomme. Ich muss dann Spalte 1, 11,12 von jede diese xls Dateien jeweils lesen können und nach Näherungswerte suchen, die mit 3 Spannungswerte besser passen.
D.h. Spalte 1,11,12 von alle xls Dateien lesen.
Ich dachte, dass mit length kann ich bestimmen wie viel Dateien gibt. Und matlab liest alle nach einander.
Also :
Spalte 1,11,12 von alle xls Dateien die in Pfad existieren lesen.
for i = 1:length(source_files)
temp = xlsread(fullfile(source_dir, source_files(i).name));
data{i} = temp{3};
end % ==============================================
Diese Code macht irrgendwie nicht was ich möchte.
Damit ihr mir besser helfen können habe ich ein einfachere Code geschrieben der auch einfache Cell arrays dabei hat:
Code:
clearall clc
a={1,2,12,3,9,3,5;5,5,3,4,2,3,3;5,2,2,9,7,12,7;4,7,3,2,6,3,6;1,2,2,4,1,1,8;1,2,1,4,2,3,4;};
b={1,2,1,4,2,3,4;5,5,3,4,2,3,3;5,2,2,9,7,12,7;4,7,3,2,6,3,6;1,2,2,4,1,1,8;1,2,12,3,9,3,5;};
c={1,2,12,3,9,3,5;1,2,1,4,2,3,4;5,5,3,4,2,3,3;4,7,3,2,6,3,6;1,2,2,4,1,1,8;5,2,2,9,7,12,7;};
Dat={a b c};
Ich möchte z.B. hier in a und b und c jeweils die Spalten 2 und 4 auslesen.
Bis jetzt habe ich nur geschaft Spalte 2 von jede Array zu lesen.
Problem1)
Matlab merkt, dass ich 3 Array von Daten habe ("variable K") und der merkt, dass ich Spalte 2 auslesen möchte. Der speichert aber die Spalten in Form von ein Array in ein zweite Array "spalte".
Problem2)
Wie kann ich mit einer Schleife das gleiche auch für Spalte 4 machen, so dass Spalte 4 auch neben Spalte 2 ausgelesen und in der selben Array gespeichert wird
hi.
Danke für eure Betreuung.
War große Hilfe.
Ich habe es probiert und der macht genau das was ich haben will.
ABER
Wenn ich es in mein Code implementiere funktioniert es nicht. Ich vermüte, dass es sich um double und Cell und die Conversion zwischen die beide handelt.
Wenn ich es in mein Code schreibe bekomme ich diese Fehlermeldung:
=======================================================
Error using cat
CAT arguments dimensions are not consistent.
Error in cell2mat (line 76)
m{n} = cat(2,c{n,:});
Error in AllFileReadTest (line 33)
[CompairData] = cell2mat(CompairData);
========================================================
Ich glaube es liegt daran, dass wenn ich xls Dateien lese bekomme ich ein array von double.
Ich habe die xls Dateien auch als Anhang mitgeschickt.
Ich habe oben text und dann nur Zahlen.
Ich habe beim vorletzte Code die Daten als Anhang mitgeschickt.
Ich glaube ich müss erst ab Zeile 5 die Daten lesen.
sagt , dass ich ab erste Zeile nur Spalte 6 und 11 z.B auslesen kann.
wenn ich ab Zeile 5 die beide Spalten auslesen möchte, dachte ich, dass ich den Code so ändern müss
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.