Verfasst am: 03.05.2013, 13:45
Titel: Koordinaten aus unregelmäßiger .dat-file auslesen
Hallo zusammen,
ihr seid meine letzte Hoffnung.
ich versuch seit Tagen mein Problem mit Matlab und .dat-Files zu lösen.
Aufgabe:
- mehrere .dat-Files vorhanden, welche eingelesen werden müssen (liegen in einem Ordner)
- Auslesen aller in der Datei befindlichen Koordinaten (x,y,z, a,b,c,)
- kein unbedingter regelmäßiger Aufbau (d.h. die gesuchten Werte stehen nicht immer in der gleichen Zeile und an gleicher Stelle)
- vor, nach und zwischen den Koordinaten stehen Textbausteine
- allerdings: die zeile mit den Werten ist regelmäßig aufgebaut. d.h. vor den Koordinaten stehen die gleichen Zeichen
Ist es möglich, in der Datei (,welche evtl. nicht immer die gleich ist, da mehrere vorhanden sind) anhand von Zeichen vor den Koordinaten die entsprechenden Werte herauszulesen und als Punktwolke/Vektor/Tabelle abzulegen bzw. zu speichern?
Oder in meinen anfängerhaften Denken: "Suche nach den Zeichen "XXX" und speichere alle Koordinaten geordnet ab und beende wenn die ganze datei durchsucht ist."
Zur Visualisierung schicke ich euch ein Beispiel einer solchen Datei.
Eine Datei öffnen und einlesen.
Zeilenweise überprüfen, ob Schlüsselwort (=deine erwähnte Zeichenfolge) enthalten ist.
Wenn ja -> Zeile weiter verarbeiten.
Ich vermute, das ist eine der gesuchten Beispielzeilen?
Code:
DECL E6POS P0 = {X 1313.621, Y 1.194226, Z 1371.562, A -179.9922, B -25.00924, C -179.9996, S 2, T 11 , E1 0.0, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}
genau das meine ich!
Vielen Dank für die schnelle Reaktion.
Jetzt wäre für mich nur die Frage, wie solch Programmcode aussehen könnte...vom Einlesen bis hin zur Ausgabe.
Dort komme ich leider im Moment nicht weiter.
_________________
das ist mein bisheriger Stand. Jetzt das Problem, dass ich mit meinen Syntax-und Strukturkenntnissen nicht weiterkomme, damit das Script...
- eine variable Zeilenanzahl durchsucht (jede dat-datei hat eine unterschiedliche anzahl an zeilen) und...
- nicht nicht die gesamte Zeile ausliest, sondern nur die Werte in Spalten schreibt.
am einfachsten teilst Du die Datei mit regulären Ausdrücken auf:
Code:
content=fileread('folge123.txt');
coords = regexp(content,'^DECL.*X([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');
coords = reshape(str2double([coords{:}]),6,[])';
letztgenannte Lösung funktioniert leider nicht bei mir.
fehlermeldung:
"Error using reshape
Product of known dimensions, 6, not divisible into total number of elements, 1."
woran kann das liegen? Liegt der Fehler bei mir?
_________________
durch und korrigierst die Zeile entsprechend. Evt. zerlegst du die Zeile auch noch - > erst umwandeln der coors in doublewerte, dann neuformatierung mit reshape.
(Ich habs jetzt mal noch bei mir getestet und der von Sirius3 gepostete Quellcode funzt bestens!)
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
tut mit leid, aber selbst mit "stop if error" bekomme ich eine leere Variable "coords" zurück.
Soll ich den Quellcode von sirius evtl im vorhergegangenen Quellcode irgendwie einbauen?
_________________
mit welcher Datei rufst du das auf? Bitte die Datei anhängen, falls es sich um eine andere als die anfangs angehängte handelt.
Liegt die Datei im momentanen Verzeichnis bzw. wird der komplette Pfad (korrekt) angegeben?
ja, es ist immer noch die Datei vom Anfang "Folge214".
Pfad ist überprüft und eingebunden.
Arbeite sogar extra mit dem m-file im entsprechenden Ordner
_________________
kurze Entwarnung..hab alles nochmal neu gestartet...neu eingefügt und nu scheint es zu gehen...
ihr habt was gut bei mir!
ich hoffe, dass wenn wieder was sein sollte (was sicherlich vorkommen wird ), mir wieder so super geholfen wird!
Danke!
_________________
Hallo zusammen,
kennt jemand von euch eine Lösung bzgl. folgender Problemstellung:
- Programm liest mittels Schleifenfunktion nacheinander die Koordinaten aus meinen .dat-files aus
- Koordinatenwerte werden auf die Variable "coords" geschrieben
- leider wird die Datei bei jedem Durchlauf von den darauffolgenden Werten überschrieben
Gibt es eine Möglichkeit, die herausgelesenen Koordinatenwerte in einer Variable abzulegen, so dass bei jedem Durchlauf die Variable um die Werte erweitert wird anstatt überschrieben zu werden?
Mein bisheriger Code lautet:
Code:
pfad = 'D:\Roboterarchive\...\Folgen';
liste = dir(fullfile(pfad,'*.dat'));
files = {liste.name};
content{k} = fileread(fullfile(pfad,files{k}));
coords = regexp(content{k},'^DECL.*X([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');
coords = reshape(str2double([coords{:}]),6,[])';
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.