WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Koordinaten aus unregelmäßiger .dat-file auslesen

 

Abschlussarbeit
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 03.05.2013, 13:45     Titel: Koordinaten aus unregelmäßiger .dat-file auslesen
  Antworten mit Zitat      
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.

Wäre euch so sehr dankbar für Hilfe!

folge123.txt
 Beschreibung:
Datei als txt-file, da dat-file nicht erlaubt!

Download
 Dateiname:  folge123.txt
 Dateigröße:  1.9 KB
 Heruntergeladen:  384 mal

_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 03.05.2013, 14:01     Titel:
  Antworten mit Zitat      
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}
 


Dann speicherst du dir einfach den Inhalt der zwischen den geschweiften Klammern steht um -> ich würde ein Array empfehlen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 03.05.2013, 14:23     Titel:
  Antworten mit Zitat      
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.
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2013, 14:51     Titel:
  Antworten mit Zitat      
Hallo,

was hast du denn bisher gemacht? Welche Probleme gibt es dabei?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 03.05.2013, 15:09     Titel:
  Antworten mit Zitat      
Code:

filename='D:\Roboterarchive\...\folge124.dat';
fid= fopen(filename, 'r');
iline=0;
zeilen=cell(100,1);
while iline~=100
    iline=iline+1;
    zeilen{iline}=fgetl(fid);
end
fclose(fid);
zeilen=zeilen(1:iline);
werte_zeile=find(strncmp(zeilen, 'DECL',4));
ausgabe=zeilen(werte_zeile+1:iline);
 


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.

Habt ihr eine Lösung?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2013, 16:42     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,

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,[])';


Grüße,
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 06.05.2013, 08:38     Titel:
  Antworten mit Zitat      
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?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 06.05.2013, 09:07     Titel:
  Antworten mit Zitat      
Hallo,
gehe mal auf:
Debug -> Stop if Errors/Warnings -> Always stop if error -> OK.

Dann läßt du es nochmal laufen und schaust dir an, welchen Inhalt coords zum Zeitpunkt des Fehlers hat.
Denn ließt du dir die Hilfe zu
Code:
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))
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 06.05.2013, 09:39     Titel:
  Antworten mit Zitat      
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?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.05.2013, 09:43     Titel:
  Antworten mit Zitat      
Hallo,

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?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 06.05.2013, 09:51     Titel:
  Antworten mit Zitat      
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
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.05.2013, 10:11     Titel:
  Antworten mit Zitat      
Hallo,

ich habe die Datei ('folge123.txt') heruntergeladen und lasse Sirius' Code darüber laufen, und es kommt zu keinen Fehlermeldungen.

Was ist die Größe der Variable content, wenn du mit "Stop on Error" in den Debugging Modus gehst?

Welche MATLAB-Version verwendest du?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 06.05.2013, 10:28     Titel:
  Antworten mit Zitat      
Version: 2013a
Größe der Variable "content": 1x1941 char

Super, dass ihr euch so um mich "kümmert"!
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 06.05.2013, 10:38     Titel:
  Antworten mit Zitat      
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 Smile ), mir wieder so super geholfen wird!
Danke!
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 07.05.2013, 16:11     Titel:
  Antworten mit Zitat      
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 = cell(size(files));
 
for k=1:numel(files)

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,[])';

end


Zum Testen anbei 3 txt-files!

Ich zähle auf euch Wink

folge124.txt
 Beschreibung:

Download
 Dateiname:  folge124.txt
 Dateigröße:  1.88 KB
 Heruntergeladen:  448 mal
folge123.txt
 Beschreibung:

Download
 Dateiname:  folge123.txt
 Dateigröße:  2.63 KB
 Heruntergeladen:  433 mal
folge11.txt
 Beschreibung:

Download
 Dateiname:  folge11.txt
 Dateigröße:  1.8 KB
 Heruntergeladen:  314 mal

_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button 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.