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

Text Datei einlessen

 

convert
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2017, 18:17     Titel: Text Datei einlessen
  Antworten mit Zitat      
Hallo zusammen Smile

ich hoffe Ihr könnt mir helfen. Ich habe eine Excel Datei eines Standardlastprofils mit vielen Zeilen und 3 Spalten (Datum, Uhrzeit und Wattanzahl). Ich konnte mit xlsread die Spalte mit den verschiedenen Wattanzahlen plotten und habe den Tagesverlauf geplottet bekommen.

Gedacht hatte ich eigentlich, dass ich die Text Datei mit vielen Zeilen und 3 Spalten (Datum, Uhrzeit und Wattanzahl) in ein Array abspeichere und dann plotten kann, aber das scheint nicht so einfach zu gehen.

Mein jetziger Code:
%Text Datei öffnen in denen Leerzeichen zwischen jedem Buchstaben/Zahl sind
fid01=fopen('Lastprofil_auschnitt.txt', 'r');

%Zeile auslesen
zeile=fgetl(fid01);

Hier kommt nun schon das erste Problem, so sieht die Zeile aus
'0 1 . 0 1 . 1 7 0 0 : 1 5 : 0 0 2 7 . 2 2 1 3 4 6 0 '
Aber überall ist ein Leerzeichen und in der ersten Zeile am Anfang sind die Zeichen "ÿþ" Die sehe ich nur wenn ich die .txt Datei in MATLAB öffne. Wenn ich diese in Matlab lösche, dann verschwinden auch die \n, sodass das nächste Datum nicht getrennt von dem letzten Watt-Wert ist.

%Leerzeichen löschen
zeile_ohne = strrep(zeile, ' ', '');

Mit dieser Funktion kann ich die Leerzeichen nicht löschen. Zeile zeigt MATLAB mir bei Value an, dass es ein 1x56char ist. Wenn ich jetzt zeile eingebe spuckt er mir zeile =

'0 1 . 0 1 . 1 7 0 0 : 1 5 : 0 0 2 7 . 2 2 1 3 4 6 0 ' aus.
Speichere ich den inhalt mit zeile =

'0 1 . 0 1 . 1 7 0 0 : 1 5 : 0 0 2 7 . 2 2 1 3 4 6 0 ' erneut per Hand und führe die Funktion aus um die Leerzeichen zu löschen klappt es.

Wenn das klappen würde, wäre mein nächste Schritt das Datum als datetime zu speichern, sodass ich irgendwann ein 2 Spalten Array habe mit datetime und den Wattangaben, um diese zu plotten oder damit weiterzurechnen.

Dafür wollte ich mit zeile_ohne_nur_datum wo sich '0 1 . 0 1 . 1 7 0 0 : 1 5 : 0 0' drin befindet als datetime umschreiben.
t = datetime(zeile_ohne_nur_datum,'InputFormat','dd.MM.yy HH:mm:ss')
Dies klappt aber nicht, wenn die Leerzeichen noch drin sind und ich weiß noch nicht wie ich den 3 Wert abschneiden kann. Wenn ich aber keine Leerzeichen habe kann ich das ganze ja auch als Array mit
%regexp(zeile_ohne,'\s','split')
abspeichern und stelle mir vor, dass ich dann den Wert garnicht abschneiden brauche, sondern das dateime aus den ersten 2 Werten erzeugen kann.

Gibt es für all das einen einfachen Weg?

Nochmal der Code
fid01=fopen('Lastprofil_auschnitt.txt', 'r');
zeile=fgetl(fid01);
zeile_ohne = strrep(zeile, ' ', '');

Die folgenden Zeilen kommen noch nicht zum Einsatz, da mein Problem ja noch besteht.
t = datetime(zeile_ohne_nur_datum,'InputFormat','dd.MM.yy HH:mm:ss')
regexp(zeile_ohne,'\s','split')

Sorry wenn der Text verirrend geschrieben ist aber ich bin auch schon echt verwirrt Smile

Lastprofil_auschnitt.txt
 Beschreibung:

Download
 Dateiname:  Lastprofil_auschnitt.txt
 Dateigröße:  838 Bytes
 Heruntergeladen:  282 mal
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: 04.11.2017, 22:42     Titel:
  Antworten mit Zitat      
Hallo,

versuch's mal mit readtable . Sollte deutlich einfacher sein :)

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2017, 13:30     Titel:
  Antworten mit Zitat      
@Harald: Danke dir, damit kann ich die .txt Datei einlesen aber nicht die ersten 2 Spalten in ein datetime verwandeln.

Falls noch jemand die "ÿþ" Buchstaben am Anfang seiner .txt hat dann heißt das, dass beim einlesen was schief gegangen ist. Habe die .txt als ANSI abgespeichert dann waren die "ÿþ" und die Leerzeichen weg.
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: 05.11.2017, 13:59     Titel:
  Antworten mit Zitat      
Hallo,

sollte schon gehen. Die erste Spalte ist vermutlich schon automatisch datetime, und die zweite bekommt man sicher auch noch dazu, etwa mit
Code:
T.Date = T.Date + between(T.Time, datetime('today'));


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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2017, 20:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

edit: ich habe gerade herausgefunden, dass ich ein 96x1 datetime hinbekomme wenn ich in der Zeile "Daten(i,1) = {t}" die geschweiften Klammern weglasse. Das mit double muss ich auf morgen verschieben
edit2: ok das mit dem double habe ich auch noch hinbekommen indem ich den cell zum string und den string zum double umgewandelt habe. Jetzt habe ich nur 4 nachkommastellen aber das müsste mit meinem jetzigen Wissen ja mit uint16 oder so möglich sein. ich habe jetzt den aktualisierten code eingefügt. Kann ich damit weiterarbeiten oder kann das später zu porblemen führen?

hier mein Code die .txt Datei heißt anders, da ich nur einen Ausschnitt hochgeladen habe und die ganzen Werte für ein Jahr habe. Die Schleife bis 96 kommt durch den 15 min Takt (mal 24h) da ich erstmal 1 Tag abbilden möchte.

fid01 = fopen('Lastprofil_aus_exel_datei.txt', 'rt');
C = textscan(fid01,'%s %s %f');
fclose(fid01);
i = 1;
for i = 1:96
str = string(C{1}{i});
str2 = string(C{2}{i});
s = strcat(str,{' '}, str2);
t = datetime(s,'InputFormat','dd.MM.yy HH:mm:ss');
Daten(i,1) = t;
i = i+1;
end

fid01 = fopen('Lastprofil_aus_exel_datei.txt', 'rt');
i = 1;
for i = 1:96
zeile=fgetl(fid01);
regexp(zeile,'\s','split');
str3 = string(ans(3));
doub = str2double(str3);
Werte(i,1) = doub;
i=i+1;
end
fclose(fid01);

Bin ich auf dem richtigen Weg, sprich kann ich mit diesem Code weiter arbeiten? Ich kriege es geplottet. Iich hatte auch mit der Funktion rumprobiert aber kam irgendwie auf einen ausführbaren code mit oben genanntem code weil ich nicht wusste wie ich auf die Tabelle zugreife und die ersten zwei Spalten in ein datetime umwandele.

Harald, danke
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.