WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Umrechnung einer Zeit-Datenreihe in Sekunden

 

PH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2011, 19:47     Titel: Umrechnung einer Zeit-Datenreihe in Sekunden
  Antworten mit Zitat      
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?


Gruß,
Paul


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.01.2011, 23:10     Titel:
  Antworten mit Zitat      
Hallo,

versuch es mal folgendermaßen:

Code:

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.*[3600 60 1]; % convert all numbers in seconds
 


Hoffe, dies ist was du wolltest?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
PH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 01:22     Titel:
  Antworten mit Zitat      

Umrechnung einer Zeit-Datenreihe in Sekunden
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: ---
     Beitrag Verfasst am: 11.01.2011, 01:33     Titel:
  Antworten mit Zitat      
noch ein Zusatz - ich denke, dass ich das erste Problem gelöst habe mit einer for-Schleife:
Code:

%Auswertung Relaxation_lang
clear all

header='headerlines';
header_lines = 25;

fid = fopen('26022010_45_20100226_143855.txt');
daten = textscan(fid, '%s %f %f %s', header, header_lines);
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
seconds = numbers.*[3600 60 1]; % convert all numbers in seconds


Allerdings funktioniert die Elementweise Multiplikation am Ende dann nicht (wohl weil es Zellen sind)

Gruß,
PH
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.01.2011, 02:07     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Denn split_numbers kennt MatLab nicht

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([3600 60 1],size(numbers,1),1);
fclose(fid)
 


Falls Fragen verbleiben-->fragen Smile

MFG

Sco

test.txt
 Beschreibung:
Test Text Datei

Download
 Dateiname:  test.txt
 Dateigröße:  76 Bytes
 Heruntergeladen:  458 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
PH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 17:49     Titel:
  Antworten mit Zitat      
Hallo,

da es noch nicht funktioniert, packe ich dir hier mal alles rein:
Version 1:
Code:

%Auswertung Relaxation_lang

clear all

header='headerlines';
header_lines = 25;

fid = fopen('26022010_45_20100226_143855.txt');
daten = textscan(fid, '%s %f %f %s', header, header_lines);
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);

end
 


Version 2:
Code:

%Auswertung Relaxation_lang

clear all

header='headerlines';
header_lines = 25;


fid = fopen('26022010_45_20100226_143855.txt'); % path/test.txt
daten = textscan(fid, '%s %f %f %s', header, header_lines);
split_string = regexp(daten{:,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}]),[],1)';
seconds = numbers.*repmat([3600 60 1],size(numbers,1),1);
fclose(fid)


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!!) ?

MfG
PH

26022010_45_20100226_143855.txt
 Beschreibung:

Download
 Dateiname:  26022010_45_20100226_143855.txt
 Dateigröße:  1.81 MB
 Heruntergeladen:  499 mal
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.01.2011, 21:17     Titel:
  Antworten mit Zitat      
Hallo,

na du bist mir ein Spassvogel Smile.

Also ich hab meine routine getestet und sie funktioniert definitiv bei VALIDEN Daten, was du du schon erwähntest, bei dir wohl nicht der Fall ist:

05:40:49
05240:50 <---
05:40:51
05:40:52
05:40:54
05:40:55
05$0:56 <---
05:40:57
05:40:58
05:4:59 <---
05:01:00

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?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
PH
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 22:09     Titel:
  Antworten mit Zitat      
Ja genau da habe ich die Fehler im textfile auch entdeckt. Habe das natürlich nicht vorher prüfen können bei über 70000 Einträgen.

Den Versuch kann ich nicht wiederholen, da ich ihn nicht selber durchgeführt habe, sondern "nur" auswerten muss.

Man bräuchte einen Befehl, der die Zeilen, die nicht dem Format entsprechen, herauslöscht...
evtl. bei textscan mit "Treat as empty"
_________________

MfG
PH
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.01.2011, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

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:
Code:

header='headerlines';
header_lines = 25;

fid = fopen('26022010_45_20100226_143855.txt');
data = textscan(fid, '%s %f %f %s', header, header_lines);
split_string = regexp(data{:,1}, ':', 'split');
numbers = reshape(str2double([split_string{:,1}]),3,[])';
seconds = numbers.*repmat([3600 60 1],size(numbers,1),1);
fclose(fid)
 


Also ich denke dies ist die einfachste und praktikabelste Lösung!

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
PH
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 22:58     Titel:
  Antworten mit Zitat      
Ja, ist auch bereits schon so geschehen - es waren tatsächlich nur diese fehlerhaften Stellen.
Erst einmal danke für deine Hilfe!
_________________

MfG
PH
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.