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
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 15.05.2013, 10:25     Titel:
  Antworten mit Zitat      
Sensationell...ich danke dir, Serius!
Die Matlabhilfe für REGEXP hab ich durchsucht, aber meistens hängt es daran die theoretischen Sachen dann in meinem Code anzuwenden.

drum noch eine Bitte/Frage:
- dat-file (siehe Anhang)
- Herauslesen eines Namens (Bsp: Zeile 6)
- Wiedergeben als char-Wert (Text)

Mein Code bisher:
Code:
path=genpath('D:\Roboterarchive\...\Dachrahmen');
path=regexp([path ';'],'(.*?);','tokens')';
for m=1:numel(path)
    pfad=path(m,1);
    pth_ch=pfad{1};
    pth=char(pth_ch);
    listeROB= dir(fullfile(pth,'$robcor.dat'));
    filesROB= {listeROB.name};
    contentROB = cell(size(filesROB));
       
    for l=1:numel(filesROB)
       
    contentROB = fileread(fullfile(pth,filesROB{l}));
    RobModel = regexp(contentROB,'^$MODEL_NAME[]="*"','tokens','lineanchors','dotexceptnewline');
    RobModel = RobModel{1};
    RobModel = char(RobModel);
   
    end
end


Aktuelle Fehlermeldung:
Index exceeds matrix dimensions
RobModel=RobModel{1};

Nur ist es überhaupt sinnvoll hier mir REGEXP zu arbeiten oder reicht dort nicht FIND oder ähnliches aus?
Oder habt ihr eine andere Lösung?

$robcor.txt
 Beschreibung:

Download
 Dateiname:  $robcor.txt
 Dateigröße:  16.54 KB
 Heruntergeladen:  683 mal

_________________

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: 15.05.2013, 22:27     Titel:
  Antworten mit Zitat      
Warum kopierst Du jede Variable erst dreimal ineinander, bevor Du sie benutzt?
So mal aufgeräumt und nicht getestet:
Code:

path=genpath('D:\Roboterarchive\...\Dachrahmen');
path=strsplit(path, ';')';
for m=1:numel(path)
    pfad=path{m};
    listeROB= dir(fullfile(pfad,'$robcor.dat'));
    filesROB= {listeROB.name};
    for l=1:numel(filesROB)
        contentROB = fileread(fullfile(pfad,filesROB{l}));
        RobModel = regexp(contentROB,'^\$MODEL_NAME[]="(.*?)"','tokens','lineanchors','dotexceptnewline');
        RobModel = RobModel{1};
    end
end
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: 16.05.2013, 08:59     Titel:
  Antworten mit Zitat      
Danke erstmal!
Hab die Variablen dreimal kopiert, um sie auf "char" zu bringen...sehe jetzt, dass es auch so funktioniert..sorry!
Leider gibt die Suchfunktion mir nicht den gewünschten Text aus...die "cell" nach der REGEXP-Funktion ist leer...somit kommt danach auch die bekannte Fehlermeldung (siehe Beitrag 2x vorher)
ich such auch schon seit gestern ständig nach Suchmerkmalen, aber er will mir nichts ausgeben...kann es daran liegen, dass die Datei bei fileread als Text ohne Trennung in eine Zeile geschrieben wird und so kein Zeilenanfang zu erkennen ist?
Bräuchte dringend Hilfe...stecke total fest!
Danke euch!
_________________

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

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.05.2013, 09:27     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,

So importiert man Text-Dateien in einen Cell-String:
Code:
S = fileread(FileName);
C = regexp(S, '\n', 'split')

Es ist ausgesprochen schade, dass dies noch nicht in Matlab direkt implementiert ist, da es eine Standardaufgabe ist. Zudem wäre es praktisch den letzten Zeilentrenner gesondert zu behandeln.

Gruß, Jan
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: 16.05.2013, 10:56     Titel:
  Antworten mit Zitat      
danke dir Jan!
nach der Suche mit REGEXP mit "meinen" Suchmerkmalen bekomme ich die gleiche Anzahl an Cell´s zurück wie die Variable "contentROB" (dein REGEXP zur Zellenerstellung) vorher...es passiert also in der entscheidenden Suche nicht viel...
also muss doch irgendwas in der Suchfunktion bzgl. des Modelnamens nicht stimmen, oder?
in den vorherigen Suchfunktionen, musste ich auch irgendwie nicht in Cell´s unterteilen und es wurde nach Strings erfolgreich gesucht...seltsam alles!
Habt ihr noch Ideen???
_________________

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: 16.05.2013, 12:34     Titel:
  Antworten mit Zitat      
Lösung:

Code:
path=genpath('D:\Roboterarchive\...\Dachrahmen\');
path=strsplit(path, ';')';
for m=1:numel(path)
    pfad=path{m};
    listeROB= dir(fullfile(pfad,'$robcor.dat'));
    filesROB= {listeROB.name};
    for l=1:numel(filesROB)
        contentROB = fileread(fullfile(pfad,filesROB{l}));
        RobModel = regexp(contentROB,'\w*="#(.*?)"\w*','match');
        RobModelneu = RobModel{1};
    end
end


Danke euch!
_________________

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

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.05.2013, 17:03     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,

Ich habe es heute schonmal an anderer Stelle gesagt: Vorsicht bei der Verwendung der variable "path"! Das ist ein sehr wichtiger Matlab-Befehl und ihn durch eine lokale Variable zu verdecken kann z.B. beim Debuggen zu brutalen Crashs führen. Wenn man großes Pech hat, sind hinterher die Preferences in Unordnung, so dass sogar ein Neustart von Matlab scheitert.

Gruß, Jan
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: 16.05.2013, 21:04     Titel:
  Antworten mit Zitat      
Ok, danke Jan!
werd die Variable entsprechend anders deklarieren!
gruß
_________________

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: 17.05.2013, 16:38     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,
hab übersehen, dass man die Eckigen Klammern noch escapen muß:
Code:
'^\$MODEL_NAME\[\]="(.*?)"'
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: 17.06.2013, 16:10     Titel:
  Antworten mit Zitat      
Hallo zusammen...

habe eine weitere Frage zu diesem Thema.

Wieder müssten Koordinaten aus einer Textdatei ausgelesen werden...ein Beispiel ist angefügt...Ich versuche mit der RegExp-Funktion zu arbeiten, aber schaffe es nicht die Suchfunktionen so einzustellen, dass ein korrektes bzw. überhaupt ein Ergebnis generiert wird.

Code:

coords=[];
coordsTemp = regexp (content, '^X\s*([-0-9.]+)\s*\w*,\s*Y\s*([-0-9.]+)\s*\w*, \s*Z\s*([-0-9.]+)\s*\w*,\s*W\s*([-0-9.]+)\s*\w*,\s*P\s*([-0-9.]+)\s*\w*,\s*R\s*([-0-9.]+)\s*\w*', 'tokens','lineanchors','dotexceptnewline');
coordsTemp=reshape(str2double([coordsTemp{:}]),6,[])';
coords=[coords;coordsTemp];
 


Habt ihr vielleicht eine Idee?

Sonnige Grüße

FOLGE001.txt
 Beschreibung:

Download
 Dateiname:  FOLGE001.txt
 Dateigröße:  225 Bytes
 Heruntergeladen:  274 mal

_________________

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: 17.06.2013, 22:52     Titel:
  Antworten mit Zitat      
vor X fehlt ja auch ein \s*
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: 18.06.2013, 07:49     Titel:
  Antworten mit Zitat      
Morgen Sirius,
danke erstmal für die Antwort...
hast du es mit dem fehlenden \s* ausprobiert? bei mir bleibt die Variable coordsTemp danach immer noch leer...

bin auch grad bissel am "verzweifeln"!
_________________

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: 19.06.2013, 07:49     Titel:
  Antworten mit Zitat      
Hallo,
mach doch bitte mal ein Lauffähiges Minimalbeispiel drauß - was steht in Content?
_________________

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: 19.06.2013, 12:48     Titel:
  Antworten mit Zitat      
Hallo Martina,

hier eines kurzes Beispiel zum Ausprobieren..Danke schon mal im Vorraus!

Code:

content=fileread('folge001.txt');
coordsTemp = regexp (content, '^\s*X\s*([-0-9.]+)\s*\w*,\s*Y\s*([-0-9.]+)\s*\w*, \s*Z\s*([-0-9.]+)\s*\w*,\s*W\s*([-0-9.]+)\s*\w*,\s*P\s*([-0-9.]+)\s*\w*,\s*R\s*([-0-9.]+)\s*\w*', 'tokens','lineanchors','dotexceptnewline');
coordsTemp=reshape(str2double([coordsTemp{:}]),6,[])';
 


Die entsprechende txt-Datei habe ich 4 Beiträge vorher angehängt.

Grüße
_________________

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: 20.06.2013, 14:41     Titel:
  Antworten mit Zitat      
Brich die expression doch mal runter, bis es funktioniert.

Code:
expr = '[XYZ](\s*)=(\s*).(\d*).(\d*)(\s*)(\w*)'
[coordsTemp] = regexp (content, expr, 'match')

Liefert auf alle Fälle für x,y,z etwas. welche Form du dann drauß machst, ist deine Sache.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3

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.