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

Informationen aus externer Datei herauslesen

 

Seraph
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 22:12     Titel: Informationen aus externer Datei herauslesen
  Antworten mit Zitat      
Hallo, ich bin neu hier und habe folgenden Problem:

Ich möchte aus einer Langenzeit-Spannungsmessung die Daten mit Matlab verarbeiten. Dabei wurden Pro Sekunde 10 Messwerte aufgenommen.

Die Daten liegen Zeilenweise wie folgt zur Verfügung
Zitat:
24.10.12 22:29:11 40 0.225513E+03


Ich möchte die zweite und dritte Spalte für die x-Achse und die vierte Spalte für die y-Achse verwenden.
Dazu muss ich allerdings die Daten erst mal zu Matlab importieren und zwar so, dass ich die Spalten wie beschrieben verwenden kann.

Und genau hier liegt mein Problem. Ich habe es bis jetzt mit fscanf probiert, bin aber zu keinem zufriedenstellenden Ergebnis gekommen.

Könnt Ihr mir vielleicht weiterhelfen, wie ich das anstellen kann?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.11.2012, 04:30     Titel: Re: Informationen aus externer Datei herauslesen
  Antworten mit Zitat      
Hallo Seraph,

Ich gehe davon aus, dass die Werte in einem File stehen.
Bitte poste doch Deinen Code mit FOPEN, so dass wir ihn verbessern können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 14:48     Titel:
  Antworten mit Zitat      
Hier ist mein Code:
Code:
fid = fopen('dfoehn.dat','r');
data = fscanf(fid,'%c');
fclose(fid);


Wenn ich data dann ausgebe, sieht diese genau so aus, wie mein Mess-file.
Allerdings bekomme ich bei von size(data) = 1 15575 als Ergebnis.

Damit kann ich allerdings glaub ich zum plotten nichts anfangen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.11.2012, 12:26     Titel:
  Antworten mit Zitat      
Hallo Seraph,

Richtig, mit FSCANF kommt man hier nicht weiter. TEXTSCAN ist hilfreicher. Man liest den ersten Teil als String ein und den Rest als Zahlen. Den String kann man dann per DATENUM in ein serielles Datums-Format umwandeln, das zum Plotten geeignet ist. Hilfreich wird dann noch DATETICK sein.
Zu diesen drei Befehlen findest Du gute Hilfen in der Dokumentation und viele Beispiele hier im Forum.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2012, 17:42     Titel:
  Antworten mit Zitat      
Danke, werd ich mal ausprobieren Surprised
Mit dem ersten Teil meinst du dann Datum und Uhrzeit?

Grüße, Seraph
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.11.2012, 11:19     Titel:
  Antworten mit Zitat      
Hallo Seraph,

Ja, ich meine, dass man "24.10.12 22:29:11" als Sting einlesen sollte, eventuell als 2 Strings und die hinterher per STRCAT verbinden, falls das einfacher ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2012, 17:55     Titel:
  Antworten mit Zitat      
So weit so gut, das klappt schon mal zum Teil.
Doch leider nur zum Teil.
Ich möchte gerne beim Plotten meine Millisekunden behalten (3. Spalte der Quelldatei).
Zitat:
Quelldatei:
24.10.12 22:29:11 40 0.225513E+03

Und ich hab in der Hilfe gelesen, dass bei datenum(Y, M, D, H, MN, S) Millisekunden verwendet werden können, bzw sie alsTeil der Sekunde erhalten bleiben. Ich vermute mal, dass ich um dieses Format zu bekommen DATEVEC verwenden muss. Doch vorher muss ich Uhrzeit und Datum zusammenfügen. Dies möchte ich mit STRCAT machen.
Aber dabei habe ich ein Problem. Zwischen beiden habe ich dann kein Leerzeichen. Wie bekomme ich das hin?

Habe ich irgendwo einen Denkfehler?

Hier mein bisheriger Code:
Code:
fid = fopen('dfoehn.dat','r');
data = textscan(fid,'%2s%1s%5c %s %1c%1c %f');
fclose(fid);

datum = strcat(data{1},data{2},data{3});
uhrzeit = strcat(data{4},data{2},data{5},data{6},data{6});
zeit = strcat(datum, uhrzeit);
spannung = data{7};


Zitat:
Ausgabe: datum
24.10.12

Ausgabe: uhrzeit
22:29:11.400

Ausgabe: zeit
24.10.1222:29:11.400
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 14:55     Titel:
  Antworten mit Zitat      
Hat jemand eine Idee für mein Problem Question
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 19.11.2012, 16:09     Titel:
  Antworten mit Zitat      
Hallo Seraph,

setzt dein String innerhalb von STRCAT in geschwungene Klammern {}.
Das führt dazu, dass Matlab die spaces beachtet. Probier einfach mal:

Code:

zeit = strcat(datum, {' '}, uhrzeit);
 


du kannst bei den Daten, die keine spaces enthalten die zusätzlichen Klammern auch weglassen.

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 23:31     Titel:
  Antworten mit Zitat      
warum nicht gleich das ganze Datum am Stück lesen:
Code:
data=textscan(fid,'%21c %f');
dates=datenum(datevec(data{1},'dd.mm.yy HH:MM:SS FFF'));


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 00:04     Titel:
  Antworten mit Zitat      
Danke für die schnelle Hilfe!

@madlab:
Danke, du hast mir sehr weitergeholfen. Very Happy

@Sirius3:
Das ist ja noch viel besser. genau so hab ich mir das vorgestellt. Very Happy
Das kürzt das ganze gewaltig ab. Herzlichen Dank!

jetzt habe ich nur noch ein Problem und sehe meinen Fehler nicht.

Code:
fid = fopen('dfoehn.dat','r');
data=textscan(fid,'%21c %f');
fclose(fid);
zeit = datenum(datevec(data{1},'dd.mm.yy HH:MM:SS FFF'));
spannung = data{2};

datetick('x','HH:MM:SS')
plot(zeit,spannung)


Ich möchte es nun plotten aber irgendetwas muss ich beim datetick falsch machen. Es wird nur die datenumber als Abszisse aufgetragen, nicht aber die Uhrzeit.
Könnt Ihr mir sagen, was ich da falsch mache?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.11.2012, 02:02     Titel:
  Antworten mit Zitat      
Hallo Seraph,
Code:
plot(zeit,spannung)
datetick('x','HH:MM:SS')

Erst plotten, dann DATETICK.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 09:36     Titel:
  Antworten mit Zitat      
Dankeschön Ihr seit die besten Exclamation Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 22:27     Titel:
  Antworten mit Zitat      
Gibt es beim Einlesen oder beim Verarbeiten der Daten eine Möglichkeit gezielt nur bestimmte Uhrzeiten und die dazugehörigen Spannungen auszuwählen, da man nur diesen Bereich plotten möchte?

Beispielsweise von 07:04:10 bis 07:04:15
Private Nachricht senden Benutzer-Profile anzeigen
 
Seraph
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 11.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 18:27     Titel:
  Antworten mit Zitat      
Hat such erledigt. Hab eben eine Lösung gefunden.
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.