Verfasst am: 17.10.2011, 10:05
Titel: .txt Datei mit Buchstaben einlesen
Servus Leute!
Bei meiner Abschlussarbeit muss ich mich mit Messdaten beschäftigen und da kommt mir natürlich matlab zuhilfe. Ich hab ein kleines programm geschrieben, welches eine Text-Datei auswertet und die Werte gleich in eine Matrix schreibt. Allerdings treten zwei fehler auf:
1. Wenn in der ersten Zeile nichts steht
2. Wenn Wörter/Buchstaben vorkommen
Meine Textdatei die ich auswerten muss beinhaltet in der ersten Zeile die Beschriftung der Messwerte und in der zweiten zeilen kommen dann die Messwertspalten:
Wer kann mir Tipps geben, wie ich mein Programm ergänzen kann, dass es mir die Textdatei SO WIE SIE vorhanden ist mit Text und zahlenwerten in eine Matrix zu schreiben ? Wäre echt cool, bin auch schon den ganzen Tag am suchen. Folgendes Programmm habe ich schon geschrieben
if first_line == -1 fclose(fid);
error('Datei war leer und wurde geschlossen.') end
% Rücksetzen auf den Anfang der Datei % sonst würde die erste Zeile vergessen werden frewind(fid);
% erste Zeile umwandeln und Spaltenanzahl bestimmen
first_line = str2num(first_line);
k = numel(first_line);
format_string = [];
for i=1:k
format_string = strcat('%e ',format_string);
end
% Jetztdie Matrix einlesen % Die Verwendung von %e ermöglicht dabei die Verwendung von inf % [k,inf] steht dabei für "Spaltenanzahl" und "bis zur (letzten) Zeile"
matrix = fscanf(fid,format_string,[k,inf]);
matrix = matrix';
2. über Import Date hab ich das ganze schon versucht, jedoch sind hier dann die Kopfzeile (die Textzeile) vom Messdatenfeld getrennt -> Einemal Matrix und einmal Vektorenkennfeld
hab die helpffunktion bzw. die Seite die Peter vorgeschlagen eingehenst untersucht, doch finde ich nicht heraus wie ich diesen Befehl mit den meinem Programm kombinieren kann!?!
Also kann ich Headerlines nun verwenden um Zeilen zu überspringen ? Wenn ja wie muss ich das deklarieren?
Bzw. brauche ich dann überhaupt noch mein Programm, welches ich vorher geschrieben hab ?
Ich hab die mathworks erklärung mehrmals gelesen, gibt für mich aber leider keinen Sinn ?!
Bzw. brauche ich dann überhaupt noch mein Programm, welches ich vorher geschrieben hab ?
Meines Erachtens nicht.
Zitat:
Ich hab die mathworks erklärung mehrmals gelesen, gibt für mich aber leider keinen Sinn ?!
Ich finde es befremdlich, wenn jemand sagt, dass ein sich über mehrere Seiten erstreckendes, aus unabhängigen Passagen bestehendes Dokument keinen Sinn ergibt. Vielleicht etwas gründlicher damit beschäftigen?
danke für deinen Tip! Nichtsdestotrotz habe ich dieses Beispiel auch vorhin schon durchgearbeitet und es kommen Fehler auf. Besonders in der Zeile für die Formatierung haut er mir immer nen Fehler raus. Neugeschrieben sieht es jetzt so aus( Die Datei hat eine Kopfzeile mit vier Wörtern
danach folgt eine 4x4 Matrix mit Kommazahlen. Also mein erstes Programm hab ich dadruch verworfen. Vielleicht kann das mal jemand in Matlab eintippen und mir den Fehler zeigen bzw. sagen was ich ändern muss. War heute ein harter Tag und es hat Nicht viel funtkioniert!
Code:
%Öffnen der Textdatei
%Rückgabewerte wird in fid gespeichert
fid = fopen('C:\Dokumente und Einstellungen\X112013\Desktop\Test.txt');
ich verstehe nicht, warum du die Datei zweimal einliest. Fehlermeldungen bekomme ich bei deinem Code nach Entfernen der mutmaßlichen Kommentare keine.
Der zweite Versuch war schon ganz gut. Nun ist es ja so, dass du beim ersten TEXTSCAN-Befehl 'delimiter', '|' hattest, weil das Trennzeichen weder Leerzeichen noch Tabulator ist. Da das bei den numerischen Daten auch der Fall ist, brauchst du auch dort 'delimiter', '|' . Dann sieht es so aus
Code:
fid = fopen('C:\Dokumente und Einstellungen\X112013\Desktop\Test.txt');
Nichtsdesotrotz funktioniert auch dieser Code nicht wie gewünscht! Die erste Zeile, die Textzeile wird KOMPLETT in einee Spalte geladen! Jedoch sollte hede Spalte in der Textdatei eine Spalte in meiner Matrix bekommen...
Also dieser Code bringt nicht das gewünschte ergebnis, wieso weis ich leider nicht ?
was sollte denn diese Zeile in dem Code? Das hat ja mit MATLAB-Syntax überhaupt nichts zu tun! Du solltest beim Lesen in der Doku schon zwischen dem Code und dem, was er zurückgibt, unterscheiden.
Zwei kleine Zeilen servieren dir die Ergebnisse wie gewünscht:
Ich würde dir dringend empfehlen, dich systematisch in MATLAB einzuarbeiten, da dir anscheinend Grundkenntnisse fehlen. Sich von Problem zu Problem zu hangeln mag zwar kurzfristig effizient sein, ist es langfristig aber wohl nicht.
Was willst du damit bewirken? Zum preallocieren schau dir den Befehl zeros oder NaN an.
bumbumquietsch* hat Folgendes geschrieben:
Nichtsdesotrotz funktioniert auch dieser Code nicht wie gewünscht! Die erste Zeile, die Textzeile wird KOMPLETT in einee Spalte geladen! Jedoch sollte hede Spalte in der Textdatei eine Spalte in meiner Matrix bekommen...
Also dieser Code bringt nicht das gewünschte ergebnis, wieso weis ich leider nicht ?
Bei mir funktioniert der Code von Harald ohne Probleme. (Mit deinen Daten)
Du kannst keinen Text in einer Matrix laden, höchstens in einem Cell Array.
Vielleicht meinst du ja sowas:
Also erstmal danke an euch beiden, dass ihr hier schnell und regelmäßig antwortet!
Der Code von Harald gibt mir in dem Sinne keinen Fehler, dass er nicht kompilieren kann, sondern dass eben das Ergebnis nicht das richtige ist so wie ich es mir vorgestellt habe.
Meine Datei die ich auswerten möchte habe ich mit dem "Import Date" eingefügt. Matlab trennt mit das ganze in eine Matrix mit Daten (1411x117 double) und in eine textdata (1x117 cell) auf.
Kann ich vielleicht über diesen Weg beide zusammenfügen ? Also dass die Textdata in der ersten Zeile der Matrix steht! Vielleicht das einfacher als mich jetzt ewig mit dieser Funtkion rumzuschlagen...
Zu mir und meinen Matlab Kenntnissen: Ich habe 3 Semester an der Uni matlab gehabt, Grundkenntnisse sind auf jeden Fall vorhanden. Nur ist das spezielle schreiben von Funktionen manchmal schwieriger als gedacht. Und selbst die Matlab help-function ist (für mich) auf englisch manchmal zu schwer und zu uneindeutig! Also ich nehme jeden Rat von euch an und bin für alles offen
Vielleicht das einfacher als mich jetzt ewig mit dieser Funtkion rumzuschlagen...
Was heißt denn ewig rumschlagen? Die fertige Lösung ist doch da.
Zitat:
Meine Datei die ich auswerten möchte habe ich mit dem "Import Date" eingefügt. Matlab trennt mit das ganze in eine Matrix mit Daten (1411x117 double) und in eine textdata (1x117 cell) auf.
Kann ich vielleicht über diesen Weg beide zusammenfügen ? Also dass die Textdata in der ersten Zeile der Matrix steht!
Das ist zwar möglich, aber nicht unbedingt sinnvoll, da du dann mit den numerischen Daten nicht mehr vernünftig arbeiten kannst. Wenn du es trotzdem machen willst, siehe Vorschlag von peter.
Zitat:
Zu mir und meinen Matlab Kenntnissen: Ich habe 3 Semester an der Uni matlab gehabt, Grundkenntnisse sind auf jeden Fall vorhanden. Nur ist das spezielle schreiben von Funktionen manchmal schwieriger als gedacht.
Aus eigener Erfahrung kann ich sagen, dass die Vorlesungen an Universitäten, in denen MATLAB verwendet werden, leider oft nicht dem Anspruch an eine systematische Einführung genügen.
Zitat:
die Matlab help-function ist (für mich) auf englisch manchmal zu schwer und zu uneindeutig!
Dann solltest du an deinen Englisch-Kenntnissen arbeiten. Davon würdest du ja nicht nur in der Arbeit mit MATLAB profitieren. Die scheinbare Uneindeutigkeit dürfte darauf zurückzuführen sein, dass in der Dokumentation zu einzelnen Befehlen ein gewisses Kenntnisse wie der Umgang mit Cell Arrays oder die generelle Befehlsstruktur in MATLAB vorausgesetzt werden.
Also ich denke, dass mir jetzt einiges klar geworden ist bzw. ich das besser verstanden habe!
Dass mit den Textdaten ist ein Fehler von meiner Seite aus gewesen, werde es jetzt so machen wie du und Peter beschrieben habt und das ganze getrennt behandel. Allerdings habe ich jetzt noch ein paar Fragen ( zum vollen Verständnis)
1. Was ist, wenn meine Textdatei nicht durch "|" zeichen getrennt ist ? Also nur durch ein normales Leerzeichen oder einen Tab-Sprung ?
2. Wenn ich jetzt nicht nur einen 4x4 Matrix habe, sondern wie oben beschrieben eine 1411x117
-> Muss ich dann 117 mal %f eingeben ? Oder kann das iwie verfielfacht werden ?
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
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.