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

viele ASCII-Dateien einlesen

 

fatso
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2009, 10:45     Titel: viele ASCII-Dateien einlesen
  Antworten mit Zitat      
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.

Code:

rx00=0;
f=1;g=0;
        for i = 1:9
            k=0;j=0;
            fileName = ['ADE1' num2str(k) num2str(j) num2str(i) '0.00M']
            [year,day,month,hour,minute,del,pres,temp,rel_humidity] = textread(fileName,'%d %d %d %d %d %d %f %f %f','headerlines',11);  
            g=length(year)+g;
            rx00([f:g],1)=year; rx00([f:g],2)=day; rx00([f:g],3)=month; rx00([f:g],4)=hour; rx00([f:g],5)=minute; rx00([f:g],6)=del; rx00([f:g],7)=pres; rx00([f:g],8)=temp; rx00([f:g],9)=rel_humidity;
            f=g+1;
        end
 

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
Private Nachricht senden Benutzer-Profile anzeigen


Lucia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 19.03.09
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 13.05.2009, 12:01     Titel:
  Antworten mit Zitat      
Hi,man kann num2str einen format string übergeben, mit dem man z.B. führende Nullen erzeugen kann, also etwa
Code:
num2str(1,'%03i')
num2str(50,'%03i')

liefert
Code:
und
Code:

vg, Lucia
Private Nachricht senden Benutzer-Profile anzeigen
 
fatso
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2009, 12:32     Titel:
  Antworten mit Zitat      
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
 


besten Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Lucia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 19.03.09
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 13.05.2009, 13:38     Titel:
  Antworten mit Zitat      
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!
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 - 2024 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.