Verfasst am: 09.06.2017, 12:44
Titel: Bestimmte Datenblöcke einer Datei einlesen
Hallo alle zusammen ,
ich bin ziemlich neu, was den Umgang mit Matlab betrifft und versuche aus verschiedenen Dateien (.lila oder auch .txt), verschiedene Datenblöcke rauszuziehen.
Die Dateien sind alle mehr oder weniger identisch und bestehen aus 2 Spalten (mit ; getrennt). Sie besitzen alle einen 17-zeiligen Header und anschließend folgt in Spalte 1 eine Datumsreihe (stündliche Darstellung) mit einem dazugehörigen Messwert in Spalte 2. Dieses Schema wiederholt sich in ungleichmäßigen Abständen durch die gesamte File, wodurch ich mit dem Befehl HeaderLines wahrscheinlich nicht weit komme, da sich dieser nur auf den Beginn der Datei bezieht, richtig?
Das Schema wiederholt sich bis zu 100 mal in einer File. Die Messreihe ist hier nur beispielhaft auf einige wenige Werte beschränkt, um es übersichtlich zu halten, in der Realität zieht sich die Messreihe über mehrere Jahre hinweg und variiert von Station, das heißt manche Stationen haben fehlende Zeiten und Messwerte und daher unterschiedliche Zeilenanzahlen.
Mein Ziel ist es nun für jede Station jeweils ein Array oder Cell-Array zu erhalten, welches nur die stündliche Datumsreihe mit zugehörigem Messwert enthält.
Ich wollte dementsprechend die 17 Zeilen Header löschen dann die Messwerte in ein (Cell)Array einlesen und das gleiche Spiele wieder für die nächsten 17 Zeilen Header.
Natürlich habe ich die Suche verwendet und auch viel in englischen Foren recherchiert aber ich bin bisher nicht so richtig zu einem Ergebnis gekommen.
for i=1:length(C2) ifstrcmp(C2{i,1},'Station')
g=g+1
Cneu{g,1}=i
end end
lCneu=length(Cneu)
Data={} for t=1:lCneu
for i=Cneu{t,1}+17:Cneu{t+1,1}-1
Data{i-17,1}=C2{i,1} end end
Es liest zunächst auch in Data die Zeitreihe zwischen den jeweiligen Stationen ein allerdings kommt dann am Ende Index exceeds matrix dimensions und verweist auf
die Zeile for i=Cneu{t,1}+17:Cneu{t+1,1}-1
Ich weiß, dass das sicher kein eleganter Ansatz ist daher bitte ich um Hilfe, als Optionen hatte ich noch mit dem Befehl while ~feof(FID) und t = fgetl(FID) herumprobiert, da ich diese Befehle in sämtlichen Foren gefunden habe. Allerdings komme ich dort nicht gerade weit, da ich das Grundprinzip dahinter nicht ganz verstehe. Und als dritten Ansatz habe ich mir sonst überlegt mit fprint für jede Station eine .txt file zu erstellen und dann jede Station erneut als Cell-Array mit textscan einzulesen, da ich am Ende die Zeitreihen jeder Station mit einer Referenzzeitreihe (mit Datetime bereits erstell) auf fehlende Zeiten und Werte kontrollieren will.
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken und Ihr könnt mir helfen
Liebe 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.