Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Embedded Software- Entwickler (m/w) - Hardwarenahe Software für innovative Steuerungssysteme
Design, Implementierung und Test von Embedded Software
DR. JOHANNES HEIDENHAIN GmbH - Traunreut (Raum Rosenheim)

Entwicklungsingenieur/-in für Hard-/Software Assistenzsysteme
Steuergeräte- und Softwareverantwortung der Radarsensorik
Daimler AG - Stuttgart

Software-Entwicklungsingenieur (m/w) Referenzierungsmethoden autonomes Fahren
Automatisierung von Bewertungsmethoden und Kalibrierverfahren nach Kundenanforderungen
Elektronische Fahrwerksysteme GmbH - Ingolstadt

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datenimport von .txt-Dateien aus Ordnerstruktur

 

Lenhold
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 20.08.2017, 09:18     Titel: Datenimport von .txt-Dateien aus Ordnerstruktur
  Antworten mit Zitat      
Hallo Matlab-Freunde,

ich bin neu hier im Forum und auch in der Matlab-Welt.
Ich habe folgendes Anliegen:

Ich habe Messwerte, die in mehreren .txt-Dateien pro Ordner abgelegt sind.
Diese möchte ich mit Matlab einlesen, um anschließend Grafiken zu erstellen.
Ich würde gerne so vorgehen:

.txt-Dateien je Ordner zusammenführen und unter dem Ordnernamen abspeichern. Dabei soll die Überschrift nur am Anfang einmal eingelesen werden und nicht pro Datei.

Die Dateien sind folgendermaßen aufgebaut:

- - Tiefe1 Tiefe2 Tiefe3 ... Tiefej
Datum1 Uhrzeit1 Wert1 Wert2 Wert3 ... Wertj
Datum2 ...
...
Datumi ...

(Datum im Format Format TT:MM:JJ und Uhrzeit HH:MM:SS)

Handelt es sich bei der Datei dann um ein cell-Array?

Zudem gibt es den zweiten "-" noch nicht, sodass ich vorher gerne dieses durch "- -" ersetzen wollen würde und die Kommata durch Punkte.

Ich hoffe ihr könnt mir da weiterhelfen oder zumindest Tipps geben.
Danke.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 20.08.2017, 13:03     Titel:
  Antworten mit Zitat      
Hallo,

Empfehlung: klein anfangen, also hier erst mal mit dem Einlesen einer Datei - z.B. über readtable . datastore kann dann helfen, alle Dateien in einem Ordner zusammenzufassen. Schließlich dann noch der dir -Befehl zur Analyse der Ordnerstruktur.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 22.08.2017, 16:13     Titel:
  Antworten mit Zitat      
Ich habe es nun so gelöst, dass ich die Dateien vorher mittels Batch-Dateien bearbeitet habe. Nun möchte ich diese erstellten .txt-Dateien einlesen. Sie sind sehr umfangreich und sehen wie oben beschrieben aus. ca. 24000 Zeilen und 100 Spalten.

Ich habe mir die readtable angesehen. Wie kann ich diese nun am besten anwenden?

A=readtable('test.txt') nimmt nicht die oberste Zeile mit. Liegt das an den zwei leeren Zellen?

Wie ist das mit den Formaten?
A=readtable('test.txt','Delimiter',',') wäre ein wenig ausführlicher. Aber wie kann ich das Format vorgeben ('Format')? Wäre das dann %s%s und danach bei Dezimalzahlen %n (müsste ich das dann 100mal eingeben?)?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 22.08.2017, 17:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
A=readtable('test.txt') nimmt nicht die oberste Zeile mit. Liegt das an den zwei leeren Zellen?

Um das zu beantworten, müsste man eine Beispieldatei (die ersten 100 Zeilen dürften reichen) sehen.

Zitat:
Aber wie kann ich das Format vorgeben ('Format')? Wäre das dann %s%s und danach bei Dezimalzahlen %n (müsste ich das dann 100mal eingeben?)?

Das schöne bei readtable ist, dass das Format an sich automatisch erkannt wird. Wenn du es angeben möchtest, dann in ähnlicher Form wie von dir gesagt, allerdings würde ich für Dezimalzahlen %f verwenden. Und nein, du musst nichts 100 Mal eingeben, da hilft repmat , z.B.
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 23.08.2017, 14:55     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe die Import-Funktion entdeckt und mir nun mittels diesen meine Daten als Table importiert:
ab Zeile 2 ist jeweils das Datum (dd.mm.yyyy) als str in Spalte1 und Uhrzeit (HH:mm:ss) als str gespeichert. Dann folgen für die werte Doubles.

Ich möchte nun plots erstellen und möchte über datenum die str umwandeln. Leider bisher ohne Erfolg:
Ich habe folgendes bereits versucht:
date=datenum(AEB2(2:end,1),'dd.mm.yyyy')
Fehler:Input to DATENUM was bot an Array of character vectors
date=varfun(@datenum,AEB2(2:end,1),'dd.mm.yyyy')
Fehler: Wrong Number of arguments

Mittlerweile bin ich am verzweifeln. Suche schon seit 2 Tagen nach einer Lösung...

Ich möchte das Datum und die Zeit in Serial date numbers umwandeln und dann in der Tabelle überschreiben, damit ich mit diesen und meinen Werten Grafiken erstellen kann.

Wäre für Hilfe dankbar.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 23.08.2017, 15:05     Titel:
  Antworten mit Zitat      
Hallo,

es ist immer hilfreich, wenn eine richtige Beispieldatei und kompletter bisheriger Code zur Verfügung gestellt wird. Dann geht das i.d.R. auch ganz schnell.

Falls AEB2 wirklich ein Table ist, musst du { } statt ( ) verwenden, um Daten daraus zu extrahieren. Statt datenum würde ich zudem datetime verwenden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 23.08.2017, 16:21     Titel:
  Antworten mit Zitat      
Hallo,

anbei die Dateien. Einmal der Text des Importscriptes und die importierte Datei in abgespeckten Version.

Ich bekomme es leider immer noch nicht hin.

AEB 2.txt
 Beschreibung:

Download
 Dateiname:  AEB 2.txt
 Dateigröße:  663 Bytes
 Heruntergeladen:  20 mal
Importscript.txt
 Beschreibung:

Download
 Dateiname:  Importscript.txt
 Dateigröße:  10.87 KB
 Heruntergeladen:  27 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 23.08.2017, 16:41     Titel:
  Antworten mit Zitat      
Hallo,

Code:
T = readtable('AEB 2.txt', 'format', '%{dd.MM.yyyy}D %{HH:mm:SS}D %f %f %f %f', 'HeaderLines', 1);
T(all(ismissing(T), 2),:) = [];
T.Date = T.Var1 + (T.Var2 - datetime('today'));
T.Date.Format = 'dd.MM.yyyy HH:mm:SS';
plot(T.Date, T.Var3)


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 23.08.2017, 17:40     Titel:
  Antworten mit Zitat      
Was genau passiert ab Zeile 2? Wird die Tabelle nach leeren Zellen durchsucht und mit [] gefüllt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 23.08.2017, 18:02     Titel:
  Antworten mit Zitat      
Hallo,

bei mir geriet aus irgendeinem Grund eine Leerzeile in den Table. Diese habe ich so gelöscht.
In den folgenden Zeilen wird aus Datums- und Zeitstempel das komplette Datum zusammengesetzt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 23.08.2017, 18:22     Titel:
  Antworten mit Zitat      
Ah super. Funktioniert bei mir.

Kann ich auch einzelne Werte auswählen? Beispielsweise jeweils 5. Wert?

Und wie kann ich die Werte, die ursprünglich in der ersten Zeile (meine Tiefe) in die Tabelle mit aufnehmen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 23.08.2017, 18:55     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kann ich auch einzelne Werte auswählen? Beispielsweise jeweils 5. Wert?

Kann man sicher, nur ist mir nicht klar, was du meinst. Die 5. Zeile wäre
Code:



Zitat:
Und wie kann ich die Werte, die ursprünglich in der ersten Zeile (meine Tiefe) in die Tabelle mit aufnehmen?

Als Überschrift wird schwierig, da Überschriften mit Buchstaben beginnen müssen. Entweder so
Code:
T = readtable('AEB 2.txt', 'format', '%{dd.MM.yyyy}D %{HH:mm:SS}D %f %f %f %f', 'ReadVariableNames', true);

oder du setzt
Code:

nachträglich um.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 24.08.2017, 11:54     Titel:
  Antworten mit Zitat      
Hallo,

Ersteinmal vielen Dank. Ich habe es nun so gelöst:
Code:

 T=readtable('AEB 2.txt','Delimiter',',','FileType','text','Headerlines',0,'ReadVariableNames',false,'ReadRowNames',false,'Format','%{dd.mm.yyyy}D %{HH:mm:SS}D %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f');
T.Date=T.Var1+(T.Var2-datetime(today));
T.Date.Format=‚dd.MM.yyyy HH:mm:SS’;
plot(T(2:end,1),T(2:end,3));
 


1. Es wird in Date nun aber ein falsches Datum angezeigt. Woran liegt das?
2. Kann ich T.Date auch an dritter Stelle der Tabelle einfügen?
3. Kann ich die erste Zeile beim Zusammensetzen von T.Date ignorieren?

Lenhold
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 24.08.2017, 14:03     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Es wird in Date nun aber ein falsches Datum angezeigt. Woran liegt das?

Eines falsch und die anderen richtig? Bei der Beispieldatei ist mir da nichts aufgefallen. Bitte eine Datei zur Verfügung stellen, bei der das Problem auftritt.

Zitat:
Kann ich T.Date auch an dritter Stelle der Tabelle einfügen?

Ja, durch Indizierung. Alternativ eine der ersten beiden Spalten ersetzen und die andere rausschmeißen.

Zitat:
Kann ich die erste Zeile beim Zusammensetzen von T.Date ignorieren?

Auch hier wieder Indizierung. Dann ist die Spalte aber doch zu kurz?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 19.08.17
Wohnort: ---
Version: Release 2016b
     Beitrag Verfasst am: 25.08.2017, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

beim Datum hatte sich ein Fehler eingeschlichen. So wie beschrieben stimmt der Code, habe nur beide Male im Format "mm".

Durch
Code:
T.Var1=T.Var1-(T.Var2-datetime('today'));
und
Code:
T.Var2=[];
überschreibe ich die erste Spalte und lösche die zweite. Wie kann ich die Überschriften weiterführen mit Var1, Var2,... (jetzt ist es ja Var1,Var3,...)?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3, 4  Weiter

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.