Verfasst am: 14.10.2013, 16:05
Titel: Einlesen einer txt-Datei in structure
Hallo,
ich arbeite derzeit mit mehreren txt-Dateien, die allerdings unterschiedlich viele Spalten beinhalten können und habe mir für diese eine Routine zum Einlesen geschrieben. Diese Routine tut auch genau das, was sie soll und funktioniert einwandfrei. Hier der Auszug der wesentlichen Befehle (ohne Fehlerabfangen):
% load file to read
fid = fopen(filename,'r');
if fid == -1
out = NaN;
columnNames = {' '};
fprintf('invalid Filename!!!\nreturning out=%d and columnNames=%s\n',...
out, columnNames{1}) return end
% check amount of given Columns from Headerline
tline = fgetl(fid);
[~, numOfCols] = sscanf(tline,'%s');
% ----- Read Column names from Header line % delete '(1)' and use lowercase letters
idx = strfind(tline,'(');
idx = sort([idx, idx + 1, idx + 2]);
tline(idx) = [];
tline = lower(tline);
fprintf('Reading Header... \n')
tmp = textscan(tline,'%s \t '); % delimiter is: space tab space
columnNames = tmp{1}; % return Nx1 Cell fprintf('Reading Header finished \n')
% ----- Read and convert data to matrix ----- fprintf('Reading Data... \n')
out = textscan(fid,repmat('%f ',1,numOfCols),'headerlines',1+startDay);
out = cell2mat(out);
fprintf('Reading Data finished \n') fclose(fid);
Nun wird mir allerdings das Hantieren mit diesen Matrizen viel zu aufwendig und ich hätte sie lieber als Struct der folgenden Form.
data(1).time
data(1).pc
.
.
.
data(1).licht
Soll heißen, ich hätte gerne automatisch die Felder gemäß der in columnNames gespeicherten Strings generiert, also ohne die störende '(1)' hinter den meisten Spalten und alles in Kleinbuchstaben (das ist bereits eingebaut).
Wenn ich nun eine weitere Datei einlese, würde ich die gerne als data(2) sichern, sodass ich zum Beispiel
und vielleicht geht das sogar noch besser, wer weiß das schon.
S ist dann der Rückgabewert der Funktion und mit dem Feld Filename weiß ich dann noch, woher die Daten stammen. Vielleicht geht es effektiver (ohne den Umweg über meine columnNames und out-Matrix, aber so funktioniert es auf jeden Fall und ist für mich nach der Vorarbeit wohl die kürzeste Variante.
Viele Grüße,
Nras.
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.