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

Aus Messdaten nx3 Matrix

 

tomtoerzs
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 24.05.2012, 16:10     Titel: Aus Messdaten nx3 Matrix
  Antworten mit Zitat      
Hallo!

Ich muss für meine Bachelorarbeit ein paar Daten auswerten.
Probier nun seit ein paar Stunden die Daten in eine Matrix umzuformen.

Ich habe folgende Messdaten in einer txt Datei:

23.05.2012 14:37:27;6,73;-27,06;23,55;0;0;
23.05.2012 14:37:57;6,85;-26,93;23,57;75,24;0;
23.05.2012 14:38:27;6,96;-26,8;23,59;555,59;0;
23.05.2012 14:38:57;7,04;-26,67;23,61;75,25;0;
...


Wenn man Datum und Zeit schonmal getrennt betrachtet hat man eine nx7 Matrix. Mich interessieren die folgenden Vektoren.
Datum, Zeit und der vorletzte Eintrag (Gewicht in g)
Ich hätte gerne aus der txt Datei eine nx3 Matrix mit den eben genannten einträgen.
Zusätzlich würde ich ab der ersten Zeile den Zeiteintrag gerne auf 0 setzten und den sekündlichen Abstand zur nächsten Zeile in dieser anzeigen lassen. Also 0 30 60 90 usw...

Ich komme absolut nicht weiter.
Bin blutiger Anfänger und würde mich über jede Hilfe freuen.

Gruß

Tom
Private Nachricht senden Benutzer-Profile anzeigen


Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 24.05.2012, 16:29     Titel:
  Antworten mit Zitat      
Hi,

so kommst du ans Ziel Very Happy
Code:


fid=fopen('deinedatei.txt');
A=textscan(fid,'%s %s %s %s %s %s %s','delimiter',';');
fclose(fid);

 


Dann musst du noch bissle mit "cell" rumspielen, aber schaffst du schon selbst und falls nicht, dann melden Wink


Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 24.05.2012, 17:46     Titel:
  Antworten mit Zitat      
Danke erstmal für die schnelle Hilfe!

Die txt Datei bekomme ich ja noch eingelsen, aber dann hörts leider auch schon auf.

Mein Output für A sieht nach deinem code so aus:
Code:
A =

    {1x1 cell}    {0x1 cell}    {0x1 cell}    {0x1 cell}    {0x1 cell}    {0x1 cell}    {0x1 cell}
 


Ich weiß nicht, wie ich die Parameter ändern soll und weiß leider überhaupt nicht weiter...
aus doc textscan werd ich auch nicht schlau.

ein paar Tips wären sehr nett!

Danke im Vorraus!

Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.05.2012, 18:17     Titel:
  Antworten mit Zitat      
Hallo,

zunächst solltest du die Datei vorverarbeiten und die Kommas durch Punkte ersetzen, da MATLAB als Dezimaltrennzeichen den Punkt braucht. Google sollte helfen, ein passendes MATLAB-Skript zu finden.

Bei dem Formatstring für textscan sollte man %s nur für Strings verwenden; für numerische Daten sollte %f verwendet werden. Wenn du Felder nicht brauchst, kannst du sie mit * (also z.B. %*f) überspringen.

Wenn du die Daten mal in MATLAB hast, würde ich datenum verwenden, um das numerische Datumsformat zu bekommen. Dann kannst du dir leicht den Unterschied in Tagen und somit auch in Sekunden holen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 28.05.2012, 16:50     Titel:
  Antworten mit Zitat      
Danke für die Antwort!
Habe bis jetzt die Daten in folgendes Format umgewandelt

Code:
23.05.2012 14.37.27 6.73 -27.06 23.55 0 0;
23.05.2012 14.37.57 6.85 -26.93 23.57 75.24 0;
23.05.2012 14.38.27 6.96 -26.8 23.59 555.59 0;
23.05.2012 14.38.57 7.04 -26.67 23.61 75.25 0;


Habe die Kommas und Doppelpunkte durch Punkte ersetzt und die Semikolons durch spaces.

Die neue Datei lese ich ein über:

Code:
[txtfile,path2txt] = uigetfile('*.txt','Bitte Datei auswählen');           % Datei kann vom Nutzer selbst gewählt werden
fid = fopen(fullfile(path2txt,txtfile),'r');


Doch textscanbefehl macht mir immernoch Schwierigkeiten.
Ich weiß nicht, welche specifiers ich wie einsetzen soll...

Ich will ja nur die erste, zweite und vorletzte Spalte zu einer Matrix zusammenfassen.
Zusätzlich würde ich ab der ersten Zeile den Zeiteintrag gerne auf 0 setzten und den sekündlichen Abstand zur nächsten Zeile in dieser anzeigen lassen. Also 0 30 60 90 usw...

Ich komme nicht weiter und freue mich über jede Hilfe.

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.05.2012, 16:57     Titel:
  Antworten mit Zitat      
Hallo,

was die Specifier angeht:

Zitat:
Bei dem Formatstring für textscan sollte man %s nur für Strings verwenden; für numerische Daten sollte %f verwendet werden.

Datum / Zeit werden dabei als Strings behandelt.

Zu der anderen Frage habe ich auch schon etwas geschrieben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 29.05.2012, 14:48     Titel:
  Antworten mit Zitat      
okay habe jetz folgenden code:

Code:
A = textscan(fid, '%19c %*f %*f %*f %f %*f')
 

somit wird das datum einfach als zeichenabfolge eingelesen, die vektoren, die mich nicht interessieren, werden "ausgeschaltet" und der vorletzte Vektor wird eingelesen.
das datum mit datenum formatieren bekomm ich wohl auch noch hin.

die Ausgabe sieht wie folgt aus:

Code:
A =

    [4x19 char]    [4x1 double]


Wie gehts nun weiter? wie kann man sich die matrix anzeigen lasssen?


Danke und Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2012, 15:06     Titel:
  Antworten mit Zitat      
Hallo,

A ist nun ein Cell Array. Mit A{1} und A{2} kannst du dir die Inhalte der Zellen ansehen und auch damit weiterarbeiten, oder durch Doppelklick auf die Variable A im Workspace und dann weiteres Doppelklicken auf die Inhalte.

Mehr zu Cell Arrays kannst du hier nachlesen:
http://www.mathworks.com/help/relea.....tlab_prog/br04bw6-98.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 30.05.2012, 20:36     Titel:
  Antworten mit Zitat      
okay habs hinbekommen!!!
Danke für die Hilfe!
Hier mein code:

Code:
%Ausführen der M-Datei zum Auslesen der Tensio-Messergebnisse



%Bei Bedarf: Ersetzen aller Kommas in der Ausgangsdatei durch Punkte

%comma2point ('PfadzurDatei');


%Neue Datei zum Auslesen Öffnen

% Datei kann vom Nutzer selbst gewählt werden

[txtfile,path2txt] = uigetfile('*.txt','Bitte Datei auswählen');            
fid = fopen(fullfile(path2txt,txtfile),'r');


%Werte spaltenweise aus Datei auslesen

G = textscan(fid, '%19c %*f %*f %f %f %*f');



%Datei schließen

fclose (fid);


%Spaltenvektoren Namen vergeben, die dem jeweiligen Kanalnamen entsprechen

Zeitstempel= G{1};
Temp= G{2};
Gewicht= G{3};



%Variable G löschen
clear G


%Zeit in 'serial date number' Format bringen

Zeitstempel= datenum(Zeitstempel, 'dd.mm.yyyy HH:MM:SS');
 



Wenn ich mir die Daten nun in einer Matrix anzeigen lassen will und folgendes eingebe:

Code:
>> B = [Zeitstempel, Temp, Gewicht]
 



erhalte ich:


Code:
B =

   1.0e+05 *

    7.3501    0.0002         0
    7.3501    0.0002    0.0008
    7.3501    0.0002    0.0056
    7.3501    0.0002    0.0008



Ist es möglich sich die "wirklichen " Vektoren in einer Matrix darzustellen??

Also nicht mit

1.0e+05 * ...


Gruß und Danke!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2012, 21:00     Titel:
  Antworten mit Zitat      
Hallo,

die Anzeige kannst du mit dem Befehl FORMAT ändern.
Falls dir die Optionen da nicht ausreichen, kannst du die Matrix auch mit FPRINTF ausgeben lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.05.2012, 12:42     Titel:
  Antworten mit Zitat      
super hat geklappt!

Habe jetzt eine weitere Datei aus Messdaten, welche ebenfalls mit einem Zeitstempel eingeleitet wird.

Die erste Zeile sieht wie folgt aus:

Code:
Tue May 29 13:51:22.812 2012 2832242202000042 +27.5 +28375


Kann ich diesen Zeitstempel auch in serial date number konvertieren?? Vorallem die Hunderstelsekunden machen mir zu schaffen!!??

Nehmen wir mal an die Hundertstelsekunden wären nicht vorhanden.
Dazu hatte ich mir folgendes überlegt.

Code:
Zeitstempel= datenum(Zeitstempel, 'mmm ddd HH:MM:SS yyyy');


Funktioniert aber leider auch nciht. Ist es denn überhaupt möglich das Jahr von Monat und Tag zu trennen??

Gruß

Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.05.2012, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

Die Sachen nach 2012 gehören nicht mehr zum Datum, oder?

Code:
str = datenum('Tue May 29 13:51:22.812 2012', 'ddd mmm dd HH:MM:SS.FFF yyyy')
datestr(str, 'dd/mm/yyyy HH:MM:SS.FFF')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.05.2012, 17:10     Titel:
  Antworten mit Zitat      
korrekt nur bis 2012!

Komisch Matlab gibt mir immer:

Code:
Error using datenum (line 179)
DATENUM failed.

Caused by:
    Error using dtstr2dtnummx
    Failed on converting date string to date number.


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.05.2012, 17:12     Titel:
  Antworten mit Zitat      
wenn man die '...' beim DateString weglässt funktionierts!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtoerzs
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.05.12
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.05.2012, 22:14     Titel:
  Antworten mit Zitat      
Danke!!!!!

Also:
Mein nächstes Problem ist, dass mein eines Messgerät alle 5sec misst (leider kann man in dem Programm kein Messintervall einstellen) und mein anderes Messgerät jede Minute!
Wäre es möglich zu den Zeiten aus den minütlichen Messungen den zugehörigen Wert aus den 5 sekündlichen Messungen zu errechnen, um so die beiden Messungen auf die selbe Zeilenanzahl zu bringen?

Ich habe also einen Zeitvektor (alle 5sec) und dazu Messwerte.
Und einen weiteren Zeitvektor (jede Minute) und dazu ebenfalls Messwerte.

Ich will sozusagen denn 5sec Vektor an den Anderen anpassen.

Ist mein Problem verständlich??
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 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.