|
|
Textfile mit mehreren Messungen splitten oder auslesen |
|
Stefan_puma |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.08.2012, 06:56
Titel: Textfile mit mehreren Messungen splitten oder auslesen
|
|
|
|
|
Hallo,
ich bin nicht so erfahren in Matlab. Unser Matlab Guru ist für eine Weile nicht da und da ich nicht richtig weiterkomme, wende ich mich ans Forum.
Mein Anliegen:
Ich habe eine Textdatei, in der mehrere Messungen zuggleich abgespeichert werden. Die einzelnen Messungen sind durch Schlagwörter "Data" getrennt.
Das ganze sieht dann so ähnlich aus.
Data 1
Time P1 P2 .....
1 4 5
.....
Data 2
Time P1 P2
1 3 5
.........
Diese Textdatei ist sehr groß.
Bisher hatte ich immer nur eine Messung drin und dafür habe ich ein m-file bekommen, dass nach einem Schlagwort, hier 'Time' sucht und dann den Rest einliest.
Nur jetzt soll Matlab von Data zu Data lesen und das jeweils in einer neuen Variablen speichern.
Hier der Code für das bisherige komplette Einlesen.
Das m-file ersetzt ',' durch '.' automatisch und funktioniert gut, auch bei großen Datenmengen.
[code]% Das ist mein Programm.
function [ messdaten variablen headerline ] = read_dewetron( filename )
% 'Time' indicates new dataset
% dataset is split with tabulator, converts ',' to '.'
%% 0. Initialisieren
nlines = 0;
headerline = 0;
ndata = 0;
% zeilanzahl
k = 0;
% spaltenanzahl
n = 0;
tic
%% 1. Datei oeffnen
fid = fopen(filename,'r');
%% 2. Zeilen zählen für pre-allocation
while ~feof(fid)
tline = fgetl(fid);
nlines = nlines + 1;
if (mod(nlines,100000)==0)
disp(['--> analysiere Zeile ' num2str(nlines)]);
end
if ~isempty(strfind(tline, 'Time [s]'))
headerline = nlines;
ndata = 1;
elseif ndata == 1
% zeilen zählen
k = k + 1;
% spaltenanzahl ermitteln, aber nur für die erste datenzeile
if k==1
data=strrep(tline,',','.');
data=regexp(data,'\t','split');
data=str2double(data);
n = length(data);
end
end
end
disp(['Anzahl der Dateizeilen : ' num2str(nlines)]);
disp(['Anzahl der Headerlines : ' num2str(headerline)]);
disp(['Anzahl der Datenzeilen : ' num2str(k)]);
%% 3. Daten einlesen
% allokieren
messdaten = zeros(k,n);
% wieder initialisieren
frewind(fid);
nlines = 0;
headerline = 0;
ndata = 0;
k = 0;
% while-loop kann durch for-loop ersetzt werden
while ~feof(fid)
tline = fgetl(fid);
nlines = nlines + 1;
if (mod(nlines,100000)==0)
disp(['--> lese ein Zeile ' num2str(nlines)]);
end
if ~isempty(strfind(tline, 'Time'))
headerline = nlines;
ndata = 1;
variablen=regexp(tline,'\t','split');
elseif ndata == 1
data=strrep(tline,',','.');
data=regexp(data,'\t','split');
data=str2double(data);
k = k + 1;
messdaten(k,1:n)=data;
end
end
%% 3. Datei schliessen
fclose(fid);
toc
end
Mir würde evtl. schon ein Hinweis, wie ich herangehen soll, helfen.
Vielen Dank im Voraus.
|
|
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|