|
clarke |

Forum-Anfänger
|
 |
Beiträge: 30
|
 |
|
 |
Anmeldedatum: 04.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.05.2012, 10:45
Titel: .txt mit Header einlesen
|
 |
Hallo,
ich bin absoluter Matlab-Neuling und bitte daher eventuelle dumme Fragen zu entschuldigen
Zur Frage:
Ich möchte eine .txt Datei einlesen, die viele Messwerte gespeichert hat. Jedoch komme ich mit dem Header der Datei nicht klar. Der Inhalt der .txt sieht etwa so aus:
Zitat: |
header
x-werte
100.00 ....
200.00 ...
...und wieder text |
Ich möchte jetzt allerdings erstmal eine große Matrix auslesen, die sämtliche Spalten und Zeilen der Werte zwischen den beiden Text Feldern hat. Und genau daran scheitere ich bisher.
Vielen Dank.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.05.2012, 11:37
Titel:
|
 |
Hallo,
du kannst TEXTSCAN mit der entsprechenden Anzahl an Kopfzeilen ('headerlines') verwenden.
Grüße,
Harald
|
|
|
clarke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 30
|
 |
|
 |
Anmeldedatum: 04.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.05.2012, 10:35
Titel:
|
 |
Hallo,
danke für die schnelle Antwort. Ich möchte jedoch immer wieder andere Dateien einlesen, sodass die Headergröße variiert.
Gibt es nicht die Möglichkeit nach dem "x-wert" zu suchen und dann eine Zeile später mit der Matrix zu beginnen, bis man den string "... und wieder text" findet?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.05.2012, 11:23
Titel:
|
 |
Hallo,
du kannst zeilenweise mit FGETL einlesen und dann die Zeilen z.B. mit STRCMP mit einer gewünschten vergleichen.
Dann mit TEXTSCAN einlesen - das läuft automatisch, bis es was abweichendes findet, um das Ende musst du dir also keine Sorgen machen.
Grüße,
Harald
|
|
|
clarke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 30
|
 |
|
 |
Anmeldedatum: 04.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.05.2012, 10:14
Titel:
|
 |
Hallo,
zu 'textscan' komme ich erst gar nicht. Ich habe bisher folgenden Code eingebaut:
bekomme da aber immer die Fehlermeldung
Zitat: |
??? Error using ==> fgetl at 44
Invalid file identifier. Use fopen to generate a valid file identifier.
Error in ==> test2 at 9
zeile = fgetl(fid); |
Da ich, wie eingangs erwähnt, mich nicht so gut mit Matlab auskenne, komme ich hier schon nicht weiter. Ich soll laut der Hilfe "fopen" verwenden, was ich aber bereits am Anfang zum Öffnen getan habe?! Sieht jemand, wo der Fehler liegt?
VG
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.05.2012, 10:57
Titel:
|
 |
Hallo,
das bedeutet, dass MATLAB die Datei nicht findet. Bitte Dateinamen überprüfen. Falls die Datei nicht im selben Verzeichnis liegt, den vollen Pfad angeben.
Desweiteren: wenn die Anzahl der Leerzeichen vor Widerspruch mal variieren kann, könnte STRFIND helfen.
Grüße,
Harald
|
|
|
clarke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 30
|
 |
|
 |
Anmeldedatum: 04.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.05.2012, 14:21
Titel:
|
 |
|
 |
|
Harald hat Folgendes geschrieben: |
das bedeutet, dass MATLAB die Datei nicht findet. Bitte Dateinamen überprüfen. Falls die Datei nicht im selben Verzeichnis liegt, den vollen Pfad angeben. |
Hupps... peinlich, peinlich.
Also, ich bin jetzt tatsächlich bis zu meinem Datenblock gekommen, der sieht folgendermaßen aus:
Zitat: |
661.706088806800 -0.877 0.869 2.640 1 1 0.038 2.484 0.35
691.621003065500 -0.924 0.923 2.646 1 1 0.031 2.576 0.36
692.644175904900 -1.100 1.099 2.644 1 1 0.030 2.576 0.43
718.549921638100 1.519 -1.506 2.640 1 1 0.032 2.576 -0.58
760.969596953300 -0.793 0.776 2.394 1 1 0.040 2.484 0.31
817.868827161400 0.931 -0.938 2.362 1 1 0.036 2.576 -0.36
867.480767363600 -0.986 0.984 2.477 1 1 0.041 2.576 0.38
867.561611113500 -0.665 0.662 2.474 1 1 0.042 2.576 0.26
|
usw. usf.
mit der folgenden while Schleife
habe ich die Matrix "mat" so gefüllt, dass die Zahlen komplett dort drin stehen. Ich erhalte jedoch die Fehlermeldung
Zitat: |
Index exceeds matrix dimensions.
Error in ==> test at 36
end |
Ich verstehe es so, dass die while Schleife, solange keine leere Zeile (keine leeren ersten 10 Zeichen) gefunden werden durchläuft und die Matrix kontinuierlich füllt. Die Daten stehen ja auch komplett in 'mat'. Nur scheint er Probleme mit dem Beenden zu haben, eigentlich müsste die while Schleife doch mit Erreichen der leeren Zellen aufhören, oder?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.05.2012, 16:11
Titel:
|
 |
Hallo,
mein Eindruck ist, dass das Lesen hier mit strread unnötig verkompliziert wird. Schau dir doch textscan an; damit kannst du den ganzen Block auf einmal einlesen - ohne Schleife oder dergleichen.
Grüße,
Harald
|
|
|
clarke |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 30
|
 |
|
 |
Anmeldedatum: 04.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.05.2012, 13:57
Titel:
|
 |
Hallo,
Harald hat Folgendes geschrieben: |
Schau dir doch textscan an; damit kannst du den ganzen Block auf einmal einlesen - ohne Schleife oder dergleichen. |
ja, das hat geholfen. Vielen Dank, Harald, für die schnelle und gute Hilfe.
Für spätere Leser, gelöst habe ich das Auslesen der Datei jetzt folgendermaßen:
|
|
|
randfee2 |

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 21.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2012, 01:43
Titel:
|
 |
Hi,
nur als Hinweis: Ich benutze für sowas immer "importdata", das überspringt irgendwelchen kram im header und wirft alles in eine Matrix. Finde ich für solche Aufgaben immer sehr schick.
Gruß
Arnie
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 21.05.2012, 12:24
Titel:
|
 |
Hallo
du kannst auch direkt mit TEXTSCAN den Header überspringen
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.05.2012, 21:24
Titel:
|
 |
Hallo,
in diesem Fall ging es meinem Verständnis nach darum, dass man in der Datei einen Block nach einer bestimmten Schlüsselzeile, deren Position man nicht kennt, einlesen möchte. Da dürfte die Kombination von FGETL und TEXTSCAN wirklich am besten sein.
Grüße,
Harald
|
|
|
|
|
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.
|
|