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

Problem mit dem Format

 

Tomahawk111
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 11:45     Titel: Problem mit dem Format
  Antworten mit Zitat      
Hi

ich versuche gerade Messreiehen bei Matlab einzulesen um sie anschließend zu plotten.
Sprich, ich habe mehrere Datein, die Messdaten eines bestimmten Zeitraums beinhalten.

ich möchte: 1. diese einlesen (es ist eine Zahl, ein Datum, eine Uhrzeit und eine kommazahl)
2. nur jeden 4. Wert der Daten "behalten"
3.die Daten aus den einzelenen Datein aneinander hängen und plotten

Mein 1. Problem ist ein richtiges Format zu finden, so dass alle Werte richtig angezeigt werden und ich mit ihnen trotzdem noch "rechnen" kann.
Bis jetzt habe ich das nur mit dem "cell" format geschafft mit unbefriedigendem ergebnis.

2. Problem: wie hänge ich die Dateien aneinander?

So weit bin ich bis jetzt:

Code:

fid=fopen('-Datei1-');
E=textscan(fid,'%u %q %q %q');
fclose(fid);
a=E{1,2}; % Datum
b=E{1,4}; % Kommazahl
c=E{1,3}; % Uhrzeit

% Jeden 4. Wert behalten

x2=a(4:4:end,:);  %Datum
y2=b(4:4:end,:);  %Kommazahl
z2=c(4:4:end,:);  %Uhrzeit


Wär echt super wenn da jemand eine geschmeidige Lösung hätte.
Ich bin zugegebenermaßen ein Matlab Neuling Smile
[/code]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich würde als Format-String '%f %s %s %f' verwenden.
Die Daten kommen dann als cell zurück, und du hast ja schon herausgefunden, wie man das extrahiert. Inwiefern ist das nun "unbefriedigend"?

Und: was willst du wie "aneinanderhängen"?
Was soll gegen was geplottet werden?
Um die Uhrzeit auf den Plot zu bringen, bietet sich DATENUM an.

Vielleicht kannst du ja einen Ausschnitt deiner Textdatei mit 3 Zeilen oder so posten, damit man damit mal experimentieren kann.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 18:07     Titel:
  Antworten mit Zitat      
Danke für Deine Antwort.
Mit '%f %s %s %f' erzeugt er mir Variablen, die allesamt "leer" sind, warum weiss ich nicht.

Aneinanderhängen mein ich so das ich aus der ersten Datei eine Zeitreihe erzeuge die 5 Jahre abdeckt und aus der 2. Datei die nächsten 5 Jahre.
Und ich würd gerne eine Variable erzeugen in der alle werte aus den Datein Vortlaufend gespeichert sind.(bei 3 Datein über 15 Jahre)

Unbefriedigend ist, dass ich alles was ich mit den "cell`s" machen will nicht funktioniert mit der fehlermeldung das ein cell als input nicht geht....
(vielleicht kenn ich aber auch nur nicht die richtigen Befehle)

dadurch, dass ich nur jeden 4. Wert nehme habe ich pro tag 6 Messwerte (Kommazahl) daraus soll ein Mittelwert für den ganzen Tag genommen werden und dann die Messwerte über die Zeit (Datum) geplottet werden.

Meine Datein sehen so aus:

15935005 01.01.1990 03:00 0,019
15935005 01.01.1990 03:15 0,019
15935005 01.01.1990 03:30 0,019
15935005 01.01.1990 03:45 0,019
15935005 01.01.1990 04:00 0,019
15935005 01.01.1990 04:15 0,019
15935005 01.01.1990 04:30 0,019

Wobei die erste Zahl zu vernachlässigen ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

da in dieser Datei (IMO unsinnigerweise) , als Dezimaltrennzeichen verwendet wird, ist eine Vorverarbeitung notwendig. Um das Leben zu erleichtern, habe ich auch noch den Datumsteil etwas umgewandelt.
Code:
filename = 'tomadata.txt';
fid=fopen(filename);
fid1=fopen([filename(1:end-4) '_mod' filename(end-3:end)], 'wt');
tline = fgetl(fid);
while ischar(tline)
    tline = ['"', tline(10:19), ' ', tline(21:25), '" ', strrep(tline(27:end), ',', '.')];
    fprintf(fid1, '%s \n', tline);
    tline = fgetl(fid);
end
fclose(fid);
fclose(fid1);

fid=fopen('tomadata2.txt');
c = textscan(fid, '%q %f %*[^\n]');
fclose(fid)

dates = datenum(c{1}, 'dd.mm.yyyy HH:MM');
values = c{2};
plot(dates, values)
datetick('x')


Das lässt jetzt keine Daten weg, aber das hattest du ja selber schon hinbekommen.

Für mehrere Dateien:
Code:
dates = []; values = [];
for-Schleife über die Dateinamen
...
dates = [dates; ...] % statt dates = ...
values = [values; ...] % statt values = ...
end


Das sollte erst mal weiter helfen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 20:11     Titel:
  Antworten mit Zitat      
Vielen Dank Harald.
Hab jetzt soweit deinen Code nachvollzogen und kapiere in auch (zu 90%) Smile

wenn ich ihn allerdings anwende kommt diese Fehlermeldung

Code:

??? Error using ==> datenum at 174
DATENUM failed.

Error in ==> Untitled6 at 17
dates = datenum(c{1}, 'dd.mm.yyyy HH:MM');

Caused by:
    Error using ==> dtstr2dtnummx
    Failed on converting date string to date number.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du mal versucht, den Code auf den Dateiausschnitt anzuwenden, den du gepostet hast? Wenn es damit funktioniert, mit der "echten" Datei aber nicht, dann ist vermutlich das Format nicht durchgängig gleich - bitte überprüfen.
Ansonsten: welche MATLAB-Version nutzt du?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 20:24     Titel:
  Antworten mit Zitat      
Du hast recht mit dem kleinen Ausschnitt klappt es.
Habe das Format der Datein eig überprüft und ist durchgängig.
Das sind DAT. Datein kann es daran liegen?
Ich hab Version 7.9.0(R2009b).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

kann ich mir nicht vorstellen.
Häng die Daten doch mal an, oder schick sie per PN.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 22:33     Titel:
  Antworten mit Zitat      
Perfekt Harald!
Es klappt alles, war mein Fehler.
Du bist meine Rettung! Wink
ich danke Dir!

Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Tomahawk111
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2010, 12:43     Titel:
  Antworten mit Zitat      
Nun hab ich doch noch eine Frage:
Wie meinst Du das mit dem:

Code:

dates = []; values = [];
for-Schleife über die Dateinamen
...
dates = [dates; ...] % statt dates = ...
values = [values; ...] % statt values = ...
end


Das check ich noch nicht ganz wie ich aus meinen einzelnen Zeitreihen eine zusammenhängende mache.

Nochmal kurz zusammengefasst:
Habe einzelne Zeitreihen (in einzelnen Datein) über einen bestimmten Zeitraum und möchte diese zu einer einzigen zusammenhängenden Zeitreihe machen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.01.2010, 12:59     Titel:
  Antworten mit Zitat      
Hallo,

in Worten:

du initialisierst dates und values als leere Arrays.
Dann lässt du eine for-Schleife über die Datei(namen) laufen - die kannst du dir mit Befehl DIR holen.
In dieser for-Schleife hängst du dann die neuen dates und values an die alten an. So werden aus den vielen kleinen Zeitreihen eine große.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 13.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2010, 16:47     Titel:
  Antworten mit Zitat      
also ich stell mich einfach zu doof an....
Ich weiss nicht wie ich eine for Schleife über die einzelnen Datein laufen lassen kann...

Dann hab ich noch das Problem, dass ich mit einer schleife den Mittelwert berechne das sieht so aus:

Code:

for i=4:4:140252
n=4;
mw(i/4)=sum(c{1,2}(i-3:i))/n;
end

values = mw';


Es sind nur nicht alle Zeitreihen 140252 Zeilen lang, mir ist der Befehl nicht bekann wie ich die Schleife bis zum Ende durchlaufen lassen kann, nachdem "end" ja auf die for-Schleife bezogen wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hier ein kleines Beispiel, das Textdateien test*.txt mit je einer Spalte einlesen würde.

Code:
filelist = dir('test*.txt');
values = [];
for I = 1:numel(filelist)
    fid = fopen(filelist(I).name);
    v = textscan(fid, '%f');
    fclose(fid);
    values = [values; v{1}];
end


Musst du natürlich leicht anpassen, aber ich will dir ja auch noch was lassen Wink

Grüße,
Harald
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.