|
|
benötige bitte Hilfe beim Einlesen einer txt Datei |
|
et_sleeper |

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 16:10
Titel: benötige bitte Hilfe beim Einlesen einer txt Datei
|
 |
Hallo Forum,
bin Anfänger und laufe voll gegen die Wand. Habe eine von vielen Textdateien im Editor, also .txt, kommen aus einer Excel 2002 Tabelle mit 8Spalten und ca 1Millionen Zeilen
Enthalten sind Sensordaten mit Zeitstempel.
Die ersten 4 Zeilen geben Ausschluss über Sensorort, vorn hinten.
Spalte 1 Zeitstempel: DD.MM.YYYY HH:MM:SS,000
Spalte 2 Sensorwert
Spalte 3 Zeitstempel: DD.MM.YYYY HH:MM:SS,000
Spalte 4 Sensorwert
Spalte 5 Zeitstempel: DD.MM.YYYY HH:MM:SS,000
Spalte 6 Sensorwert
Spalte 7 Zeitstempel: DD.MM.YYYY HH:MM:SS,000
Spalte 8 Sensorwert
Habe versucht diese mit Textscan einzulesen, vergebens.
Wie kann ich diese am einfachsten und besten einlesen?
Danke im voraus
Beschreibung: |
|
 Download |
Dateiname: |
test1.txt |
Dateigröße: |
3.29 KB |
Heruntergeladen: |
482 mal |
|
|
|
|
|
Jan* |

Forum-Century
|
 |
Beiträge: 178
|
 |
|
 |
Anmeldedatum: 06.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 16:54
Titel:
|
 |
Wäre es nicht deutlich einfacher die Excel-Daten direkt in Matlab ohne Umweg über die .txt einzulesen? Dafür gibt es die Methode
|
|
|
Evron |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 22.11.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 17:09
Titel:
|
 |
|
 |
|
Hallo,
meine Erfahrungen mit Matlab sind auch nicht gerade umfangreich, aber das Einlesen von Zeitangaben in der Form wie Du sie hast, scheint schwierig. Am besten wäre es, wenn Du die Zeitangaben in Excel einfach alle in Unix-Time (Sekunden seit 1.1.1970) umrechnen könntest. Dann bilden sie einfach eine Zahl bzw. Double Wert und Du kannst sie leicht z.B. mit dlmread() einlesen. Die Funktion kannst Du wunderbar in folgender Weise nutzen:
Separator ist die Zeichenkette mit der die Spalten getrennt werden, bei Dir glaube ich ' '. FirstRow ist die erste Zeile, welche Daten enthält, bei Dir 4 (da dlmread anders als sonst in Matlab bei 0 anfängt zu zählen). Zu guter letzt setzt Du FirstColumn auf 0.
Theoretisch müsstest Du auch die Zeitangaben als string einlesen können, dann müssten sie noch als solche gekennzeichnet sein, d.h. in Hochkommas stehen. Strings in Matritzen müssen aber immer dergleichen Länge sein, dies heißt dann aber das Du sie wieder in irgendetwas umwandeln musst, mit dem Du rechnen kannst, sofern Du sie weiter verabeiten willst.
Unix Time lässt sich mit Matlab auch wieder in normale zeit umrechnen, dazu mehr unter: http://www.gomatlab.de/konvertierun.....-seit-1-1-1970-t1351.html.
|
|
|
tompie |

Forum-Guru
|
 |
Beiträge: 260
|
 |
|
 |
Anmeldedatum: 19.09.07
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: immer alles
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 18:29
Titel:
|
 |
Hallo,
irgendwie verstehe ich die Diskussion nicht... Matlab hat doch excellente Datums-Konvertierungsfunktionen eingebaut, und zwar
zur Umrechnung eines Datums in die interne Matlab-Darstellung, dem sog. date vector.
Die Funktion
macht dann genau das Umgekehrte.
Du kannst also Deine Zeitstempel als Strings einlesen (z.B. mit dem sehr mächtigen textscan) und dann mit
datevec(Zeitstempel, 'dd.mm.yyyy HH:MM:SS,000')
in das date vector Format konvertieren. Diesen date vector kann man dann mit
in eine Absolutzeit seit dem 1.1.0000 umrechnen. Damit sind dann Berechnungen von Zeitdifferenzen usw. ganz leicht möglich.
Lies Dich einfach mal in die Helptexte ein, da gibt es wirklich sehr viele Möglichkeiten.
Gruß tompie
|
|
|
tompie |

Forum-Guru
|
 |
Beiträge: 260
|
 |
|
 |
Anmeldedatum: 19.09.07
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: immer alles
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 18:30
Titel:
|
 |
Hallo,
irgendwie verstehe ich die Diskussion nicht... Matlab hat doch excellente Datums-Konvertierungsfunktionen eingebaut, und zwar
zur Umrechnung eines Datums in die interne Matlab-Darstellung, dem sog. date vector.
Die Funktion
macht dann genau das Umgekehrte.
Du kannst also Deine Zeitstempel als Strings einlesen (z.B. mit dem sehr mächtigen textscan) und dann mit
datevec(Zeitstempel, 'dd.mm.yyyy HH:MM:SS,000')
in das date vector Format konvertieren. Diesen date vector kann man dann mit
in eine Absolutzeit seit dem 1.1.0000 umrechnen. Damit sind dann Berechnungen von Zeitdifferenzen usw. ganz leicht möglich.
Lies Dich einfach mal in die Helptexte ein, da gibt es wirklich sehr viele Möglichkeiten.
Gruß tompie
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 30.11.2009, 18:45
Titel:
|
 |
Hi, zum einlesen folgendes verwenden (angepasst an dein Beispiel):
Dann die Strings so wie tompie gepostet hat in Zeiten umwandeln.
Viele Grüße,
der Oli
|
|
|
et_sleeper |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 09:49
Titel:
|
 |
Guten morgen und danke an alle. habe es nunmal getestet, aber es geht nciht.
Habe eine tab-stop-getrennte-.txt aus excel2007 erstellt. diese dann mit deinen (derOli) programmzeilen versucht einzulesen. Geht nciht.
Matlab Odner ist in EigeneDateien, dort meine txt eingefügt und Namen geändert.
Was mache ich falsch?
PS: Versuche derzeit beides, die große Datei mit jeweils 8 Spalten
dd.mm.yyyy hh:mm:ss,000 xxx (also 4 mal hintereinander!!!)
und einmal nur ein Sensor, sprich
dd.mm.yyyy hh:mm:ss,000 xxx (nur 1 mal)
Markus
Beschreibung: |
|
 Download |
Dateiname: |
4Spalten.txt |
Dateigröße: |
4.49 KB |
Heruntergeladen: |
533 mal |
Beschreibung: |
|
 Download |
Dateiname: |
1Spalte.txt |
Dateigröße: |
1.37 KB |
Heruntergeladen: |
458 mal |
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 11:20
Titel:
|
 |
Hi,
wenn die Daten mit Tab statt mit Leerzeichen getrennt sind, muss du dies textscan sagen:
Viele Grüße,
der Oli
|
|
|
et_sleeper |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 11:26
Titel:
|
 |
Danke für die info, werde es direkt ausprobieren.
Eine Frage habe ich aber noch. Wie bekomme ich es denn hin, dass die spalteninhalte der sensoren in 4 verschiedene variablem hinterlegt werden?
A = textscan(file_2,'%s%s%f%s%s%f%s%s%f%s%s%f%*[^\n]','Headerlines',4, 'Delimiter', \t);
der liest mir ja jetzt alle zeichen nach und nach ein, wie unterscheidet der dann die speicherung der werte?
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 11:31
Titel:
|
 |
Hi, die Daten werden in einem Cell Array gespeichert, von dort aus kannst du auf die einzelnen Werte zugreifen. Du kannst diese auch jeweils wieder in Matrizen umwandeln. Aber oft ist es so handlicher.
Viele Grüße,
der Oli
|
|
|
et_sleeper |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 12:06
Titel:
|
 |
Ok danke, habe jetzt noch ne frage. er liest denke ich mal ein, anfangs stand in der statuszeile
"Evaluate current cell" jetzt steht ncihts mehr da, die m-file ist rosa im hintergrund und matlab arbeitet. wie kann ich es sehen bzw aufhalten?
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 13:55
Titel:
|
 |
Hi,
tut mir leid, meine Matlab Version hat dieses Verhalten nicht. Aber abbrechen kann man mit Strg + C, auch sollte unten im Matlab Command Window Busy stehen solange matlab arbeitet. Mich wundert etwas, dass es so lange dauert, checke mal beim einlesen deine RAM Werte es kann sein, dass dein Rechner viel in den swap memory schreiben muss.
Viele Grüße,
der Oli
|
|
|
et_sleeper |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 15:20
Titel:
|
 |
so, habe jetzt mal was gelesen und getestet. abbrechen geht mit deiner tasten kombi.
habe auch mal 2 scrprt gemacht, aber statt rosa ist es gelblich. zu sehen ist auch mein quellcode. das einzige was ich gemacht habe ist in der quelldatei die headerlines gelöscht. also erste zeile direkt einzulesene werte.
trotzdem verstehe ich noch nicht so ganz wie es geschrieben werden muss und wie ich auf diese daten zugreifen kann, wenn sie erfolgreich eingelesen sind.
vll weiß ja einer was.
Markus
Beschreibung: |
|
 Download |
Dateiname: |
Matlab2.JPG |
Dateigröße: |
181.79 KB |
Heruntergeladen: |
546 mal |
Beschreibung: |
|
 Download |
Dateiname: |
Matlab1.JPG |
Dateigröße: |
152.95 KB |
Heruntergeladen: |
570 mal |
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 03.12.2009, 18:28
Titel:
|
 |
Hi, du sollst nicht mehr textread sondern textscan, so wie oben nutzen. Zunächst speicherst du in einer Cell Matrix A, wenn du es möchtest kannst du dann Elemente von A als andere Variablen speichern.
Viele Grüße,
der Oli
|
|
|
et_sleeper |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 06.10.09
|
 |
|
 |
Wohnort: Erkelenz
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 14.12.2009, 14:50
Titel:
|
 |
mahlzeit Forum,
habe jetzt mal am we versucht klar zu kommen, wenig erfolgreich.
habe mal meine datei angehangen so wie sie auch sein wird.
mein code lautete
1:
clear date time F1 F2 H1 H2 A B C D;
[date,time,F1,F2,H1,H2]=textread('A420_B1.txt','%s%s%d%d%d%d ' , '\t','headerlines',0);
A420_B1_stop=lenght(date);
A420_B1=1;
das zusammenfügen meiner Datum/Uhrzeit:
while(A420_B1<=A420_B1_Stop)
A=char (date(A420_B1,1));
B=char (time(A420_B1,1));
C=[A, ',' B];
D(A420_B1)= {C};
A420_B1=A420_B1+1;
end
T_A420_B1=datevec(D);
leider ist das ergebnis erfolgslos. in uhrzeit ist der erste sensor enthalten, sensor 2 fehlt, senosr 3 und 4 sind in Variabel für F1 und F2.
wo liegt mein Fehler???
grüße und danke im voraus
PS: mit textscan kam immer to many output arguments
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|