Ich habe zwar aktuell einen lauffähigen Code für mein Problem, allerdings ist es mir daran gelegen eine möglichst kurze Rechenzeit zu erzielen.
Vielleicht hat ja hier jemand eine Idee, wie ich den Import meiner Daten noch beschleunigen kann.
Meine Daten (Koordinaten, verschiedene Messwerte) liegen als ASCII Tabstopp getrennt (.dat) vor. Meine Test-Datei (folgende können noch größer werden) ist 600MB groß.
Darin enthalten sind ca. 6,5Mio. Zeilen à 10 Spalten.
Diese werden in unregelmäßigen Abständen durch Zeilen mit Text unterbrochen. Dieser Text ist für mich allerdings überflüssig.
Mein erster Versuch sah wie folgt aus:
Code:
fid=fopen('test.dat');
data={};
while ~feof(fid)
tline=fgetl(fid);
if isletter(tline(1))==1; % zeilen mit Buchstaben werden ausgelassen else
data=[data;textscan(tline, '%f %f %f %f %f %f %f %f %f %f', 'delimiter', '\t')];
end end fcloseall;
Allerdings überschreitet die Rechenzeit hier locker 5 Minuten, habe diesen Code daher nie zuende laufen lassen.
Da die Funktion importdata nur bis zur ersten auftretenden Zeile mit Text importiert, gehe ich aktuell wie folgt vor. Öffnen der Test-Datei und anlegen einer Temp-Datei. Überschreiben der Daten ausgenommen der Textzeilen und anschließend importieren der kompletten Temp-Datei.
Dauer aktuell ca. 3,5 Minuten.
Meine anfängliche Euphorie hat heute ein jähes Ende genommen.
Ich habe inzwischen meine tatsächlich für die Anwendung gedachten Daten erhalten. Größe ca. 1,1GB (weiß nicht, ob das was zur Sache tut).
Ich habe den Code noch um ein " für das Löschen der Zeilen erweitert, ansonsten habe ich ihn exakt so übernommen, wie von Sirius geschrieben.
% Datei zunächst als einzelnen String einlesen
data = fileread(fullfile(pfad, filename));
% Löschen der überflüssigen Zeilen mit Text
data = regexprep(data,'^\s*[A-Za-z"].*$','','lineanchors','dotexceptnewline');
% String in Matrix aufsplitten
data = sscanf(data,'%f',[anzvars,inf])';
end
Nun habe ich bei meiner aktuellen Datei das Problem, dass alle Schritte ordnungsgemäß durchlaufen werden, jedoch nach dem letzten Schritt, dem Aufsplitten des strings auf die Matrix das Ergebnis "no data" lautet.
Gleiches zeigt mir übrigens auch das Matlab Import Wizard an "[no data]".
Irgendwo scheint die Datei einen Stolperstein zu enthalten, allerdings ist mir schleierhaft, wie dieser aussehen soll oder an welcher Stelle er liegen könnte. Im Grunde sollte der Dateiaufbau identisch zu meinen vorherigen Dateien sein, mit denen alles tadellos funktioniert hat.
Hat jemand einen Rat?
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.