Verfasst am: 13.05.2009, 10:45
Titel: viele ASCII-Dateien einlesen
Hallo zusammen, ich habe folgendes Problem:
Ich habe 365 ASCII-Dateien mit Namen ADE10010.00M bis ADE13650.00M.
In jeder Datei ist ein unwichtiger Header von 11 Zeilen, danach habe ich 9 gleich lange Spalten mit Zahlenwerten, die ich einlesen möchte. Die länge der Spalten ist innerhalb einer Datei gleich lang, variiert aber von Datei zu Datei (es handelt sich bei den Dateien um Rinex-Dateien von GPS-Stationen mit Informationen über Luftdruck, Temperatur, Feuchte, Zeit (Stunde, Minute) und Datum (Tag, Monat, Jahr). Diese Informationen stecken in den Spalten.)
Auf jeden Fall möchte ich mit einer Schleife nacheinander alle Spalten dieser Dateien in einem Vektor (rx00) gespeichert haben (9 Spalten)
Die Frage ist, wie kreiere ich eine Schleife, in der der String meiner Dateinamen von 001 bis 365 durchläuft? Ich habe schonmal angefangen und von 001-009 ist es kein Problem.
Natürlich wäre es jetz möglich mehrere Schleifen zu basteln (mit k und j), so dass er alle Files von 001 bis 365 einliest, aber ich würde gerne wissen ob das eleganter funktioniert.
Ist alles ein bisschen schwer zu verdeutlichen was ich eigentlich will.
Hoffe auf Antworten, danke schonmal
Ui das ging ja schnell. Vielen lieben Dank für die Antwort, echt klasse.
Hätte aber noch 2 Fragen:
1. Wie kann ich eine Abfrage reinbringen, dass die Schleife weiterläuft, wenn eine Datei fehlt
zb. von den ADE10010.00M bis ADE13660.00M fehlt ADE12500.00M, stattdessen soll einfach mit ADE12510.00M weitergemacht werden oder eine Zeile mit NaN-Werten eingefügt werden.
2. würdet ihr mir das einlesen der daten textscan (mit cell-arrays) oder textread (wie im ersten beitrag) empfehlen?
Code:
rx00=1;
f=1;g=0;
for i = 1:366
fileName = ['ADE1' num2str(i,'%03i') '0.00M'];
fid=fopen(fileName,'r');
data = textscan(fid,'%d %d %d %d %d %d %f %f %f','headerlines',11);
fclose(fid);
g=length(data{:,1})+g;
rx00([f:g],1)=data{:,1}; rx00([f:g],2)=data{:,2}; rx00([f:g],3)=data{:,3}; rx00([f:g],4)=data{:,4}; rx00([f:g],5)=data{:,5}; rx00([f:g],6)=data{:,6}; rx00([f:g],7)=data{:,7}; rx00([f:g],8)=data{:,8}; rx00([f:g],9)=data{:,9};
f=g+1;
end
Du kannst einfach fid überprüfen, falls das -1 ist, konnte die Datei nicht geöffnet werden. Dann kannst du das abfangen und mit der nächsten Datei weitermachen. Ich würde textscan empfehlen, es soll meines Wissens nach textread ersetzen und ist auch flexibler.
Viele Grüße!
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.