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

Gleichen Datenbereich in mehreren .csv suchen und einlesen

 

mikemeiksen
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2018, 17:22     Titel: Gleichen Datenbereich in mehreren .csv suchen und einlesen
  Antworten mit Zitat      
Guten Tag,

in meiner Auswertung habe ich 50 verschiedene .csv-Datein, die in einem Ordner liegen.
Es sind Zeitreihen verschiedener Sensoren über mehrere Tage, wobei der Zeitraum von Datei zu Datei unterschiedliche ist.

Für z.B. die Druckaufzeichnung gibt es mehrere Dateien, Druck0.csv, Druck1.csv..., für die Temperatur ebenso.

Ich möchte die (Druck-,Temperatur-,...)Daten eines bestimmten Tages (also 1.1.17, 00:00 bis 23:59) zusammen fügen.
Manchmal wurde dieser Tag in *0.csv aufgezeichnet, manchmal in *1.csv... Je nach Datenreihe.

Konnte ich das ausdrücken?

Nun brauche ich also ein Skript, das in dem Ordner alle gewünschten Dateien öffnet (alle Druckdateien, alle Temperaturdateien), schaut, ob dort der benötigte Zeitraum drin steht, wenn ja, die Daten des Zeitraums aus der dritten Spalte rauskopiert, die Datei wieder schließt, zur nächsten Datei geht (durch den ganzen ordner iteriert)
und am Ende eine neue .csv erstellt, in der die Daten mit ihrem Namen (der Dateiname wäre ausreichend) ausgeschrieben werden.

Das ist leider zu komplex mit meinem Anfängerinnenwissen.

Mag jemand Wissen teilen?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.01.2018, 01:37     Titel:
  Antworten mit Zitat      
Hallo,

am einfachsten dürfte datastore und readall sein, dann im Nachhinein mit logischer Indizierung den gewünschten Zeitbereich herausholen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2018, 14:12     Titel:
  Antworten mit Zitat      
Hallo Harald!
Danke für die groben Pfade, auf denen bin ich nun gut unterwegs -

ich scheitere daran, logische Operatoren auf die Zellen mit 'dd/mm/yyyy hh:mm:ss' anzuwenden.
Kann mir jemand sagen, welche Möglichkeiten es da gibt?
Private Nachricht senden Benutzer-Profile anzeigen
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2018, 16:27     Titel:
  Antworten mit Zitat      
schau dir mal den Befehl datenum() an. Damit konvertierst du das Datum in eine Zahl, die sich für logische Vergleiche verwenden lässt.
Private Nachricht senden Benutzer-Profile anzeigen
 
mikemeiksen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2018, 19:14     Titel:
  Antworten mit Zitat      
Nun bin ich an dem Punkt, wo ich die Datei einlesen kann und den Zeitstempel mit meinen Wunschdaten vergleichen-
mit der Schleife im Code lösche ich nun nach und nach jede Zeile, die mir nicht gefällt. Das geht doch sicher noch irgendwie schneller und eleganter, oder?



Code:

ds = datastore('data.csv','Delimiter',';','NumHeaderLines',0);

ds.SelectedVariableNames = {'TimeString','VarValue'};

T=readall(ds);

t = datetime(T.TimeString,'InputFormat','dd.MM.yyyy hh:mm:ss');

a=numel(t);
tlower = '25-December-2015';
tupper = '27-December-2015';

for i=1:a;
   
    s=t(i,1);
    tf = isbetween(s,tlower,tupper);
        if  tf==0
            T(i,:) = [];
        end
   
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
T(~isbetween(t,tlower,tupper), :) = [];


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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2018, 17:57     Titel:
  Antworten mit Zitat      
Danke, das geht schon viel schneller

Ein wenig bin ich weiter gekommen -

Code:

clear all
pfad='../00_Tankprofile/2015-12-10bis2016-01-13/NeuerOrdner';

N=dir(pfad);
Namen = struct('name', {N(3:31).name}); %nicht so schlimm, dass 29 fix, weil immer soviele, erstmal
El=numel(Namen);
cd(pfad);

for i=1:1:El %für alle datein im folder
 data = {Namen(i).name}.';
ds = datastore(data,'Delimiter',';','NumHeaderLines',0);

ds.SelectedVariableNames = {'TimeString','VarValue'};
preview(ds);
T=readall(ds);

t = datetime(T.TimeString,'InputFormat','dd.MM.yyyy hh:mm:ss');

tlower1 = '16-December-2015';
tupper1 = '17-December-2015';
tlower2 = '21-December-2015';
tupper2 = '22-December-2015';

T(~isbetween(t,tlower1,tupper1) & ~isbetween(t,tlower2,tupper2),:) = [];
String = strrep(data{1,1}, '.csv', ' ');

 T.Properties.VariableNames = {'TimeString' String};

if i>1
    TZus=[T S];
elseif i==1
    S=T;
end

end

writetable(TZus,'myData.csv','Delimiter',';');
 


Nun könnte ich nacheinander alle Datein einlesen und auf die zwei Daen reduzieren, die mich interessieren.

Woran ich nun schon lang hake: wie kann ich nun bei jedem Schleifendurchlauf die Variablen-Spalte auschreiben, um nach allenSchleifen eine .csv draus zu machen?

Ich scheitere an meinem halbwissen über die Cells/Tables.. Hab nun schon verschiedene Sachen ausprobiert und schaff es nicht, fortlaufen d eine Matrix oder Table zu schreiben, die den Variablennamen hat und in jeder Schleife erweitert wird.

In dem Codebeispiel versuche ich es mit Table, weil die automatisch eine neue Spalte anfügt- Table hat aber ein Problem damit, wenn ich ab dem zweiten Durchlauf die Timeseries nciht umbenannte habe und ich denke, dass ich ein Problem kriege, wenn ich später verschiedene anzahlen an Zeilen aus meienm Filter raus bekomme (da mag Table nciht, oder?)


Habt ihr n Shortcut?

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

der Punkt bei datastores ist, dass du dort schon direkt alle Dateien angeben kannst. Dann brauchst du keine Schleife mehr und kannst mit readall alle Dateien auf einmal einlesen.

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