Verfasst am: 10.01.2011, 19:47
Titel: Umrechnung einer Zeit-Datenreihe in Sekunden
Hallo,
habe ein Problem mit einer Datenreihe, die ich bereits eingelesen habe. Es handelt sich um eine Werte für die Zeit t. Diese sind folgendermaßen im file dargestellt:
00:00:01 bis 1438:14:44 , d.h. Stunden:Minuten:Sekunden
Die Abstände sind leider nicht konstant, sonst hätte man einfach duhzählen lassen können...
Eingelesen habe ich es mit textscan und %s, also als String.
Gibt es eine Möglichkeit, diese Zeitangaben alle in Sekunden umzurechnen?
data = textscan(fid,'%s');
split_string = regexp(data{1}, ':', 'split'); % separate "numbers" from whole string in single cells
numbers = str2double(split_numbers{:}); % convert strings to double
seconds = data.*[3600601]; % convert all numbers in seconds
Klicke hier, um den Artikel bei Amazon.de anzuschauen.
Hallo Sco,
Danke - die Erzeugung von split_string, also die Unterteilung des Strings in 3 Spalten einer Zelle, funktioniert schonmal.
Danach gibt es aber eine Fehlermeldung.
Sicher, dass es bei " numbers = str2double(split_numbers{:}); " split_numbers und nicht split_string sein soll.
Denn split_numbers kennt MatLab nicht, aber wenn ich dafür split_string eingebe kommt auch ein Error ("Too many input arguments")
Und noch eine Frage: Muss ich dann bei der Aufrechnung in Sekunden beachten, dass mein 'data' - cell array noch weitere Zellen mit den anderen Messgrößen hat?
Vielleicht kannst du mir nochmal helfen...
Gruß,
PH
PH
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.01.2011, 01:33
Titel:
noch ein Zusatz - ich denke, dass ich das erste Problem gelöst habe mit einer for-Schleife:
split_string = regexp(daten{1}, ':', 'split'); % separate "numbers" from whole string in single cells for i=1:(length(daten{1}))
numbers{i} = str2double(split_string{i,1}); % convert strings to double end
seconds = numbers.*[3600601]; % convert all numbers in seconds
Es sollte natürlich split_string und nicht split_number sein.
Am einfachsten wäre, wenn du das Txt-File mit anhängst, dann kann ich schauen woran es liegt.
Ich habe aber einfach mal selber ein txt-file gebastelt, was deinem in etwa entsprechen sollte (ohne Header). Es ist angehangen. Ich wusste natürlich nicht in welcher Spalte deine Zeiten sind (in meinen File in der 1.). Hierfür würde folgender Code funktionieren:
Code:
fid = fopen('test.txt'); % path/test.txt
data = textscan(fid,'%s %f %f %s');
split_string = regexp(data{:,1}, ':', 'split'); % data(:,x) müsste geändert werden wenn deine Zeiten nicht in der ersten Spalte sind (x ist Spaltennummer)
numbers = reshape(str2double([split_string{:,1}]),3,[])';
seconds = numbers.*repmat([3600601],size(numbers,1),1);
fclose(fid)
split_string = regexp(daten{1}, ':', 'split'); % separate "numbers" from whole string in single cells for i=1:(length(daten{1}))
numbers{i} = str2double(split_string{i,1}); % convert strings to double end
for j=1:(length(daten{1}))
A{j} = 3600*numbers{1,j}(1,1)+60*numbers{1,j}(1,2)+numbers{1,j}(1,3);
Im Anhang noch das txt-file.
Meiner Meinung nach liegt es aber am fehlerhaften Textfile, da einige Werte falsch aufgenommen wurden und nicht ins Format passen.
Daher die nächste Frage: Kann man diese Werte, die nicht dem Format entsprechen herauslöschen (die koplette Zeile!!) ?
Das konnte ich natürlich nicht ahnen, dass es deine Daten waren, welche die Fehler verursacht haben...
Ich weis leider nicht wie du überprüfen kannst ob die Daten valide sind, jedenfalls nicht bei so vielen Einträgen im Text-File. Woher hasst du denn dieses komische Textfile? Vielleicht kannst du die Messung ja wiederholen?
also ehe wir jetzt Stunden verschwenden um einen Code zum löschen der Zeilen zu entwicklen, lösche doch einfach die betreffenden Zeilen aus dem Text-File!!!
Es sind nämlich nur die oben genannten 3. Des weiteren musst du noch hier in der 3. Spalte:
05:40:54 45.2 37&28 0.96
das & durch ein . erstetzen. Das wars, somit läuft es hiermit durch:
Ja, ist auch bereits schon so geschehen - es waren tatsächlich nur diese fehlerhaften Stellen.
Erst einmal danke für deine Hilfe!
_________________
MfG
PH
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.